我试图将文本文件中的浮点数读入二维数组。该文件具有以下结构:
1.1
3.3
2.4576
0.2432
1.3
235.234
我希望将这些行读入2d列表,最后得到以下内容。
data = [[1.1, 3.3]
[2.4576, 0.2432]
...
[1.3, 235.234]]
到目前为止我的代码:
f = []
with open(str(i)) as fl:
for line in fl:
f.append(float(line))
是否有一个简单的"很好"这样做的方法,没有使用很多帮助变量?
(文件的长度和数组的大小(x * x)都是已知的)
答案 0 :(得分:0)
f = []
with open(str(i)) as fl:
while True:
line1,line2 = float(fl.readline()),float(fl.readline())
f.append([line1,line2])
if not (line1 and line2): break
这是有效的,因为通过调用fl.readline()来设置行,所以这将每次读取一个额外的行。如果浮点转换失败,这显然会导致错误,但如果所有行都格式正确
,它将起作用你也可以这样做:
f = fl.read().splitlines()
f = [f[x:x+2] for x in range(0,len(f),2)]
这更像是pythonic
已编辑:ValueError: Mixing iteration and read methods would lose data
在与readline一起使用for
循环时被调用
答案 1 :(得分:0)
如果你正在使用NumPy,这可能会更直接:
arr = np.loadtxt('arr.txt')
arr = arr.reshape((len(arr)//2, 2))
e.g。从数字列:1. 1.1 2. 2.2 ... 6. 6.6
得到:
array([[ 1. , 1.1],
[ 2. , 2.2],
[ 3. , 3.3],
[ 4. , 4.4],
[ 5. , 5.5],
[ 6. , 6.6]])
答案 2 :(得分:0)
这可能是一个更通用的解决方案。
finalList=[]
with open("demo.txt") as f:
while True:
try:
innerList = [float(next(f).strip()) for x in xrange(2)]
finalList.append(innerList)
except StopIteration:
break
print finalList
输出:
[[1.1, 3.3], [2.4576, 0.2432], [1.3, 235.234]]
答案 3 :(得分:0)
这样做:
lines = [line.rstrip('\n') for line in open('file.txt', 'r')]
iterate_list = iter(lines)
for two_elem in iterate_list:
print two_elem, next(iterate_list)
对于此文件内容:
1.1
3.3
2.4576
0.2432
1.3
235.234
你会得到:
1.1 3.3
2.4576 0.2432
1.3 235.234
答案 4 :(得分:-1)
如果您正在使用numpy(如果您正在进行任何认真的数字工作,则应该使用numpy),那么您可以重新设置线性列表
import numpy as np
n = np.loadtxt(file_name)
n.reshape((-1,2))
重塑中的-1是让numpy弄清楚尺寸大小