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

时间:2018-01-16 13:57:48

标签: python

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

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]]

但相反,它是:

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

我尝试了insert而不是append,但似乎并非如此。我需要一些帮助 - 提前谢谢你!

4 个答案:

答案 0 :(得分:4)

您在循环的每次迭代中重复使用相同的列表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]

答案 1 :(得分:2)

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

答案 2 :(得分:2)

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

enter image description here

试试这个

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

<强>输出

  

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

答案 3 :(得分:1)

使用<form method="post"> {% csrf_token %} <label for="first_name">Vorname </label> <input style="margin-bottom: 1em;" id="first_name" class="form-control" type="text" maxlength="25" name="first_name" value="{{ user.first_name }}"><br> <label for="last_name">Nachname </label> <input style=" margin-bottom: 1em;" id="last_name" class="form-control" type="text" maxlength="25" name="last_name" value="{{ user.last_name }}"><br> <label for="email">E-Mail </label> <input style="margin-bottom: 1em;" id="email" class="form-control" type="email" maxlength="50" required=True unique=True name="email" value="{{ user.email }}"><br> <button class="btn btn-success btn-sm" type="submit">Bestätigen</button> <a style="margin-left: 1em;" href="{% url 'accounts:view_profile' %}" id="cancel" name="cancel" class="btn btn-default">Zurück</button></a> {% if form.errors %} <p style="margin-left: 5em;" class=" label label-danger"> Das ist keine gültige E-Mail-Adresse. Bitte versuche Sie es erneut. </p> {% endif %} </form> 对象代替使用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)

https://docs.python.org/3/library/csv.html?highlight=csv#csv.reader