python - 从txt文件中读取一定数量的行并以pythonic方式转换为列表

标签 python arrays file-io idl-programming-language

假设我有以下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/

相关文章:

c++ - while(f) 没有按预期表现

python - 在列表列表中查找与项目的部分匹配

javascript - 在javascript中定位数组中的最后一项

php - 在 PHP fwrite() 中覆盖内容

Java:通过名称调用和访问数组,该名称存储在不同数组或变量内的字符串中

c - 用c程序处理数组

javascript - 将语言选择写入 jQuery 文件?

python - 将本地 python 脚本连接到远程 Spark Master

python - 使用python在桌面(windows/ubuntu)上绘图

Python - 如何阅读 Sharepoint excel 工作表特定工作表