快速读取 python 中的列分隔文本数据



我在包含许多变量的文本文件中有一个以列分隔的数据。原始文件是在 Fortran 中创建的。每行中的值数是固定的(即 8(。例如,值"-0.213897E-05"紧接着同一行上的其他七个值。空白列表示"+ve 符号"。有 8 个这样的行,但值的总数可能在 62 到 64 之间。然后大约有 1000 个这样的变量。

文件中一个变量的示例如下所示。

     -0.213897E-05 0.106493E-06-0.530198E-08 0.263970E-09-0.131423E-10 0.654316E-12-0.325765E-13 0.162189E-14
     -0.427794E-05 0.212986E-06-0.106040E-07 0.527940E-09-0.262846E-10 0.130863E-11-0.651530E-13 0.324377E-14
     -0.641691E-05 0.319479E-06-0.159059E-07 0.791910E-09-0.394269E-10 0.196295E-11-0.977294E-13 0.486566E-14
     -0.855588E-05 0.425972E-06-0.212079E-07 0.105588E-08-0.525692E-10 0.261726E-11-0.130306E-12 0.648755E-14
     -0.106949E-04 0.532465E-06-0.265099E-07 0.131985E-08-0.657114E-10 0.327158E-11-0.162882E-12 0.810944E-14
     -0.128338E-04 0.638958E-06-0.318119E-07 0.158382E-08-0.788537E-10 0.392590E-11-0.195459E-12 0.973132E-14
     -0.149728E-04 0.745452E-06-0.371138E-07 0.184779E-08-0.919960E-10 0.458021E-11-0.228035E-12 0.113532E-13
     -0.171118E-04 0.851945E-06-0.424158E-07 0.211176E-08-0.105138E-09 

我已经使用 readlines(( 成功读取文件,然后将字符串转换为浮点数,但结果缓慢且耗时。我还尝试了FortranFormat,它甚至更慢。文件的总大小约为2GB。

请建议一种本地方法来读取这些值。文件中大约有 1000 个这样的变量。

Pandas 可以在这里提供帮助,文档中有一节是关于读取固定宽度文件,将文本读取为 StringIO(文件的工作方式相同(。

In [21]: colspecs = [(5 + 13 * i, 5 + 13 * (i + 1)) for i in range(8)]
In [22]: pd.read_fwf(StringIO(s), colspecs=colspecs, header=None)
Out[22]:
          0         1             2             3             4             5             6             7
0 -0.000002  0.000000 -5.301980e-09  2.639700e-10 -1.314230e-11  6.543160e-13 -3.257650e-14  1.621890e-15
1 -0.000004  0.000000 -1.060400e-08  5.279400e-10 -2.628460e-11  1.308630e-12 -6.515300e-14  3.243770e-15
2 -0.000006  0.000000 -1.590590e-08  7.919100e-10 -3.942690e-11  1.962950e-12 -9.772940e-14  4.865660e-15
3 -0.000009  0.000000 -2.120790e-08  1.055880e-09 -5.256920e-11  2.617260e-12 -1.303060e-13  6.487550e-15
4 -0.000011  0.000001 -2.650990e-08  1.319850e-09 -6.571140e-11  3.271580e-12 -1.628820e-13  8.109440e-15
5 -0.000013  0.000001 -3.181190e-08  1.583820e-09 -7.885370e-11  3.925900e-12 -1.954590e-13  9.731320e-15
6 -0.000015  0.000001 -3.711380e-08  1.847790e-09 -9.199600e-11  4.580210e-12 -2.280350e-13  1.135320e-14
7 -0.000017  0.000001 -4.241580e-08  2.111760e-09 -1.051380e-10           NaN           NaN           NaN

这些已被读入浮动


原始答案:read_csv在这里可能会对您有所帮助,它非常适合分隔文本文件:

pd.read_csv('your_file.txt', sep=' ')

最新更新