所以我有一个包含整数矩阵的文件。我需要读入文件的内容并将其存储在列表列表中。我无法弄明白我该怎么做。
以下是文件A.txt包含的示例:
3,7
1,2,3,4,5,6,7
11,12,13,14,15,16,17
21,22,23,24,25,26,27
到目前为止,这是我的代码:
def main():
A = open('A.txt')
Alist = []
for eachLine in A:
main()
那我该怎么做呢?我知道我必须以某种方式使用readLine()和split()方法,但我不确定如何。它也必须是整数列表,而不是字符串。有人可以帮忙吗?
答案 0 :(得分:3)
我们需要将每一行解析为一个整数列表,调用split
将其分解为逗号,然后int
将它们从字符串(如['3', '7']
)转换为{{ 1}}),然后积累那些:
[3, 7]
(这使用with open('A.txt') as f:
Alist = []
for line in f:
part = []
for x in line.split(','):
part.append(int(x))
Alist.append(part)
语句来打开文件,这是首选方法,因为它会在您完成文件时自动关闭文件,即使在此期间出现错误。)
但请注意我们有两个循环只是初始化一个空列表然后为每个元素添加一些东西?这是一种非常常见的模式,因此Python具有列表推导能力,使它们更好。让我们先做内部部分:
with
看看它是如何完全相同的?现在我们可以缩短它:
with open('A.txt') as f:
Alist = []
for line in f:
part = [int(x) for x in line.split(',')]
Alist.append(part)
答案 1 :(得分:0)
使用map()
:
In [1]: with open("data1.txt") as f:
...: lis=[map(int,x.split(",")) for x in f]
...: print lis
...:
[[3, 7], [1, 2, 3, 4, 5, 6, 7], [11, 12, 13, 14, 15, 16, 17], [21, 22, 23, 24, 25, 26, 27]]
或使用ast.literal_eval()
:
In [5]: import ast
In [6]: with open("data1.txt") as f:
lis=[list(ast.literal_eval(x)) for x in f]
print lis
...:
[[3, 7], [1, 2, 3, 4, 5, 6, 7], [11, 12, 13, 14, 15, 16, 17], [21, 22, 23, 24, 25, 26, 27]]