-1

所以我有一个包含整数矩阵的文件。我需要读入文件的内容并将其存储在列表中。我无法完全弄清楚我必须如何做到这一点。

以下是文件 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() 但我不确定如何。它也必须是整数列表,而不是字符串。任何人都可以帮忙吗?

4

2 回答 2

3

我们需要将每一行解析为一个整数列表,调用split以逗号将其分解,然后int将它们从字符串转换(如['3', '7']into [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)

(这使用with语句来打开文件,这是首选方法,因为它会在您完成文件后自动关闭文件,即使同时出现错误也是如此。)

但是请注意我们有两个循环,它们只是初始化一个空列表,然后为每个元素添加一些东西?这是一种非常常见的模式,因此 Python 具有列表推导以使它们更好。我们先只做内部部分:

with open('A.txt') as f:
    Alist = []
    for line in f:
        part = [int(x) for x in line.split(',')]
        Alist.append(part)

看看它是如何完全一样的?现在我们可以让它更短:

with open('A.txt') as f:
    Alist = [[int(x) for x in line.split(',')] for line in f]
于 2012-11-04T21:24:33.043 回答
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]]
于 2012-11-04T21:27:26.923 回答