我正在尝试读取以下数据

     0      3177         5
 3.4275637990000E+33 7.7345239420000E+11 2.3294608630000E+21 2.0879655710000E+05
 1.9252063604938E+06 2.0037575941018E+06-1.0000000000000E+00 0.0000000000000E+00
 0.0000000000000E+00 1.1806662792899E+08 0.0000000000000E+00 1.6258263880000E+00
 0.0000000000000E+00 3.0000000000000E+00 8.7143739363190E-06 1.1806108844692E+08
 1.5216398828085E-04 1.5621014411210E+00 0.0000000000000E+00 2.9999238008221E+00
 1.0979515673726E-05 1.1805809220990E+08 2.4154974448797E-04 1.5621006577022E+00
 0.0000000000000E+00 2.9996256593782E+00 2.1960663497032E-05 1.1803176057951E+08
 9.6633451293816E-04 1.5620942285096E+00 0.0000000000000E+00 2.9994037831384E+00
 2.7670327547614E-05 1.1801096239579E+08 1.5341282126072E-03 1.5620891863088E+00
 0.0000000000000E+00 2.9990524870828E+00 3.4865681847029E-05 1.1797792540807E+08
 2.4357001431448E-03 1.5620811953515E+00 0.0000000000000E+00 2.9984939557312E+00
 4.3934518613971E-05 1.1792547175142E+08 3.8674871654846E-03 1.5620681038247E+00
 0.0000000000000E+00 2.9976271324793E+00


前三行是标头,其后的行是一遍又一遍重复的6个变量,换句话说:

#Header line1
#Header line2
#Header line3
 var1 var2 var3 var4
 var5 var6 var1 var2
 var3 var4 var5 var6
 var1 var2 var3 var4
 var5 var6 var1 var2
 var3 var4 var5 var6
 var1 var2 var3 var4
 var5 var6 var1 var2
 var3 var4 var5 var6
 var1 var2 var3 var4
 var5 var6


在Python中的单个变量中收集所有var1的最佳方法是哪种?

任何想法表示赞赏。



编辑:

请注意,数字并不总是用空格分隔。当右边的数字为负数时会发生这种情况,因为它显示了第2列和第3列之间的第3行。

总是相同的格式为1.1234567890123E+12,如果为负数,则为-1.2345678901234E+12。那是小数点前的1个数字,小数点后的13个数字和指数中的2个数字。

最佳答案

我不确定此解决方案的总体效果如何,但是它可以解决您的问题。

首先,您可能应该分别处理标头和文件的其余部分。这是数据部分。

使用pandas固定列文件阅读器read_fwf读取数据,跳过前三行:

import pandas as pd
import numpy as np
data = pd.read_fwf("yourfile", skiprows=2, widths=[20,20,20,20])


从数据框中提取值,将它们展平:

values = data.values.reshape(1,-1)[0]


删除空单元格,将其重塑为六列:

values[~np.isnan(values)].reshape(-1,6)

07-24 14:54
查看更多