我在文本文件中有值,例如:
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()]
但我不确定这是否是正确的方法,或者是否有更好的方法来做到这一点
提前感谢您的帮助
答案 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']]