从文本文件中读取值并将其存储到列表中

时间:2014-04-16 08:43:26

标签: python list file

我在文本文件中有值,例如:

1,2,3,4
1,1,1,1
4,3,2,1
2,2,2,2
   ...etc

现在我想将每一行存储到列表中,因此,我创建了一个列表来存储这些值

numbers = [[]]

我将如何将这些值存储到列表中,以便从示例aboe:

numbers[1] = [1,2,3,4]
          ... etc
到目前为止,我有这个:

    with open(s) as f :
    for s in f:
        numbers = [l.split(',') for l in f.readline()]

但我不确定这是否是正确的方法,或者是否有更好的方法来做到这一点

提前感谢您的帮助

3 个答案:

答案 0 :(得分:2)

您应该将输入转换为int。此外,你可以做一个单行:

with open('test.txt') as f:
    numbers = [[int(j) for j in i.split(',')] for i in f.read().split('\n')]

>>> print numbers
[[1,2,3,4],
 [1,1,1,1],
 [4,3,2,1],
 [2,2,2,2]]

答案 1 :(得分:1)

您可以将csv模块与列表理解和/或map一起使用:

import csv
with open('text1.txt') as f:
    numbers = [map(int, row) for row in csv.reader(f)]

>>> numbers
[[1, 2, 3, 4], [1, 1, 1, 1], [4, 3, 2, 1], [2, 2, 2, 2]]

对于Python 3,您必须在地图周围添加额外的列表调用或使用列表理解(将在Python 2和3中都有效):

numbers = [list(map(int, row)) for row in csv.reader(f)]
#or
numbers = [[int(x) for x in row] for row in csv.reader(f)]

无需导入任何模块即可:

>>> with open('text1.txt') as f:
    numbers = [[int(x) for x in line.split(',')] for line in f]
...     
>>> numbers
[[1, 2, 3, 4], [1, 1, 1, 1], [4, 3, 2, 1], [2, 2, 2, 2]]

在这里,你可以看到你需要遍历文件对象而不是file.readline,对文件对象的迭代一次返回一行,然后我们将该行和它的项分成整数。 (file.readline()只返回一行,而在你的代码中,你只是在该行上进行迭代,这是错误的。)

答案 2 :(得分:0)

rows = []
with open("foo.txt") as f:
    rows = [l.split() for l in f]

输出

[['1,2,3,4'], ['1,1,1,1'], ['4,3,2,1'], ['2,2,2,2']]