假设我有以下txt文件:
0.0163934
6
7.52438e+09
2147483648
6.3002e-06 6.31527e-08 0 0 6 0 0 4.68498e-06 0.00638412 12.6688
6.33438e-06 0 5.99588e-09 0 0 0 0 4.70195e-06 0 12.876
6.36874e-06 0 6.09398e-09 0 0 0 0 4.71894e-06 0 13.0867
6.40329e-06 0 6.19369e-09 0 0 0 0 4.73593e-06 0 13.3009
6.43802e-06 0 6.29503e-09 0 0 0 0 4.75294e-06 0 13.5185
6.47295e-06 0 6.39803e-09 0 0 0 0 4.76996e-06 0 13.7397
0.0163934
3
7.52438e+09
2147483648
6.3002e-06 0 5.89935e-09 0 0 0 0 4.68498e-06 0 12.6688
6.33438e-06 0 5.99588e-09 0 0 0 0 4.70195e-06 0 12.876
6.36874e-06 0 6.09398e-09 0 0 0 0 4.71894e-06 0 13.0867
我想将第一行的每一行读取为 float 或整数,然后根据第二行,我想将其余行读取为列表或数组的列表。
在 IDL 语言中我只需要做:
openr, 1, fname
readf, 1, Time
readf, 1, Bins
readf, 1, dummy
readf, 1, dummyLong
da1= fltarr(10, Bins)
readf, 1, da1
这样整个数字 block 就存储在整数da1中,其大小为:10*Bins。 (行和列与 python 中相反)
然后我可以用同样的方式阅读以下几行。
在 python 中我正在做:
Time=float(filen.readline())
Bins=int(filen.readline())
dummy=float(filen.readline())
dummyLong=long(filen.readline())
lines=[filen.readline() for i in range(Bins)]
arra=[[float(x) for x in lines[i].split()] for i in range(len(lines))]
所以我需要两行代码和复杂的迭代,这对初学者来说是无法理解的。
有没有一种方法可以像 IDL 中一样,用一条语句和 pythonic 来做到这一点?
谢谢!
最佳答案
单行不一定比双行更好。
但你可以做到:
arra = [[float(x) for x in filen.readline().split()] for _ in range(Bins)]
我更喜欢两行:
lines = (filen.readline() for _ in range(Bins))
arra = [[float(x) for x in line.split()] for line in lines]
关于python - 从txt文件中读取一定数量的行并以pythonic方式转换为列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14650764/