Python-从文本文件读取并放入列表

Python-从文本文件读取并放入列表,python,Python,作为标题,我一直在尝试从文件中读取文本,转换为int并将其存储在列表中。我的文本文件如下所示: 1,2 3,4 5,6 [[1, 2], [3, 4], [5, 6]] 我想读这个文件,把每一对数字放到一个列表m中,然后把这些列表存储在一个更大的列表lis中。以下是我的尝试: def read_file(): lis = [] m = [0,0] with open("data.txt") as f: for line in f:

作为标题,我一直在尝试从文件中读取文本,转换为int并将其存储在列表中。我的文本文件如下所示:

1,2
3,4
5,6
[[1, 2], [3, 4], [5, 6]]
我想读这个文件,把每一对数字放到一个列表m中,然后把这些列表存储在一个更大的列表lis中。以下是我的尝试:

def read_file():        
    lis = []
    m = [0,0]

    with open("data.txt") as f:
        for line in f:
            m[0], m[1] = line.split(",")    # assign to list m
            m[0] = int(m[0])   # cut off '\n' and for later use
            m[1] = int(m[1])   
            lis.append(m)      # store in lis

    print lis
我希望lis是这样的:

1,2
3,4
5,6
[[1, 2], [3, 4], [5, 6]]
但事实是:

[[5, 6], [5, 6], [5, 6]]

我尝试了插入而不是附加,但似乎这不是它有问题的地方。我需要一些帮助-提前谢谢你

在循环的每次迭代中都重用相同的列表m,每次都覆盖上一次迭代中设置的值。最后,lis保存了许多对同一列表的引用

def read_file():        
    lis = []
    with open("data.txt") as f:
        for line in f:
            m, n = line.split(",")    
            lis.append([int(m), int(n)])      

    print lis
相反,在循环中将新值作为一个整体分配给m:

for line in f:
    m = [0,0]
    m[0], m[1] = line.split(",")
    m[0] = int(m[0])
    m[1] = int(m[1])   
    lis.append(m)
或更短:

for line in f:
    m = line.split(",")
    m[0] = int(m[0])
    m[1] = int(m[1])   
    lis.append(m)
甚至更短,使用地图:

for line in f:
    m = list(map(int, line.split(",")))
    lis.append(m)
或者更简短,使用列表理解:

lis = [list(map(int, line.split(","))) for line in f]

在循环的每次迭代中都重用相同的列表m,每次都覆盖上一次迭代中设置的值。最后,lis保存了许多对同一列表的引用

相反,在循环中将新值作为一个整体分配给m:

for line in f:
    m = [0,0]
    m[0], m[1] = line.split(",")
    m[0] = int(m[0])
    m[1] = int(m[1])   
    lis.append(m)
或更短:

for line in f:
    m = line.split(",")
    m[0] = int(m[0])
    m[1] = int(m[1])   
    lis.append(m)
甚至更短,使用地图:

for line in f:
    m = list(map(int, line.split(",")))
    lis.append(m)
或者更简短,使用列表理解:

lis = [list(map(int, line.split(","))) for line in f]
改为使用csv.reader对象,该对象使用逗号作为默认字段分隔符:

import csv

with open('data.txt') as f:
    reader = csv.reader(f)
    result = [list(map(int, lst)) for lst in reader]
    print(result)
输出:

[[1, 2], [3, 4], [5, 6]]
改为使用csv.reader对象,该对象使用逗号作为默认字段分隔符:

import csv

with open('data.txt') as f:
    reader = csv.reader(f)
    result = [list(map(int, lst)) for lst in reader]
    print(result)
输出:

[[1, 2], [3, 4], [5, 6]]
在lis中,所有索引引用一个列表m。如果m is中发生任何更新,则m在任何地方都会更新

试试这个

lis.append( list(map(int,line.split(","))))    
输出

[1'、[2']、[3'、[4']、[5'、[6']

在lis中,所有索引引用一个列表m。如果m is中发生任何更新,则m在任何地方都会更新

试试这个

lis.append( list(map(int,line.split(","))))    
输出

[1'、[2']、[3'、[4']、[5'、[6']


您正在重用和覆盖同一个实例中的值m.m=[0,0]是您创建子列表的唯一时间,因此您使用的是同一个实例中的值m.m=[0,0]是您创建子列表的唯一时间,因此您使用的是同一个,而使用csv.reader肯定更好,这听起来似乎本身就能解决问题,但事实并非如此。问题在于重用m,在没有任何解释的情况下,OP可以使用csv.reader再次使用m。虽然使用csv.reader肯定更好,但这听起来似乎本身就能解决问题,但事实并非如此。问题在于重用m,在没有任何解释的情况下,OP可以使用csv.reader.Nice插图再次使用m,但我认为appendm+[]不是解决问题的最佳方法。IMHO,最好不要再使用m。很好的说明,但我不认为appendm+[]是解决这个问题的最佳方法。我的意思是,最好不要再使用m了。很遗憾,在我看来,最好的代码没有文本来解释。。。我甚至建议不要将列数限制为2,而是使用类似lis.append[inti.strip for I in line.split',']的列表理解。遗憾的是,我认为最好的代码没有文本可供解释。。。我甚至建议不要将列数限制为2,而是使用类似lis.append[inti.strip for I in line.split',']的列表理解。谢谢!地图在这种情况下真的很聪明。谢谢!在这种情况下,Map真的很聪明。