Python,从文件到2d列表的数字

时间:2015-11-03 18:15:30

标签: python list io

我试图将文本文件中的浮点数读入二维数组。该文件具有以下结构:

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)都是已知的)

5 个答案:

答案 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弄清楚尺寸大小