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

2024-09-28 22:56:20 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

^{pr2}$

如何将这些值存储到列表中,以便从示例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()]

但我不确定这是不是正确的方法,或者是否有更好的方法

提前谢谢你的帮助


Tags: 方法in示例列表forreadlineaswith
3条回答
rows = []
with open("foo.txt") as f:
    rows = [l.split() for l in f]

输出

^{pr2}$

您可以将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]]

对于python3,您必须在map周围添加一个额外的list调用,或者使用list comprehension(在python2和Python 3中都可以使用):

^{pr2}$

无需导入任何模块,您可以执行以下操作:

>>> 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对象而不是file.readline,迭代一个file对象一次只返回一行,然后我们将该行拆分并将其项大小写为整数。(file.readline()只返回一行,而在代码中,您只迭代了那一行,这是错误的。)

您应该将您的输入转换为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]]

相关问题 更多 >