我正在尝试读取以下数据
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
前 3 行是标题,后面的行是 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 fixed-column file reader 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]
删除空单元格, reshape 为六列:
values[~np.isnan(values)].reshape(-1,6)
我是一名优秀的程序员,十分优秀!