将文档逐行附加到列表

Appending a document line by line to a list

我正在尝试将文本文档 "Payments" 中的每个单词放入一个列表中。对于 "Payments" 的每一行,我希望它在 myList 的列表中,所以它看起来像这样:

myList = [['E1234','12/09/14','440','A','0']['E3431','10/01/12','320','N','120']['E0987','04/12/16','342','A','137']] 

我需要使用 .split().strip() 来从逗​​号中删除单个单词并删除每行末尾不可见的下一行 space。这是我到目前为止编写的代码:

myFile = open("Payments.txt")
myList = []
for line in myFile:
    print(line.strip())
    myList.append(line.strip())
myFile.close()
print(myList)

该程序确实有效,但不是以我预期的方式工作。该程序返回以下内容:

E1234,12/09/14,440,A,0
E3431,10/01/12,320,N,120
E0987,04/12/16,342,A,137
E5322,05/04/02,503,A,320
E9422,26/11/16,124,N,0
E7382,31/03/11,414,A,235
['E1234,12/09/14,440,A,0', 'E3431,10/01/12,320,N,120', 'E0987,04/12/16,342,A,137', 'E5322,05/04/02,503,A,320', 'E9422,26/11/16,124,N,0', 'E7382,31/03/11,414,A,235']

它已将文档附加到 myList,但它没有将每一行放入其自己的 myList 列表中,并且该行是一个完整的字符串,而不是单独的字符串,由一个逗号。

我确实尝试在 for line in myFile: 的末尾添加 .split(','),但它显示了一条错误消息:

AttributeError: '_io.TextIOWrapper' object has no attribute 'split'

您需要在每个 line:

上调用 .split()
myList = []
for line in myFile:
    print(line.strip())
    myList.append(line.strip().split(","))

或者,在一行中使用 list comprehension:

myList = [line.strip().split(",") for line in myFile]

或者,您也可以使用 csv module:

import csv

with open("Payments.txt") as f:
    reader = csv.reader(f)
    myList = list(reader)

print(myList)

您可以做任何您要求的事情 - 从打开的文件中获取行列表,剥离每一行,然后按 , 拆分 - 所有这些都在一行中:

myList = map(lambda line: line.strip().split(","), myFile.readlines())

你的方法的问题是你没有在阅读后拆分行。

作为一种更 pythonic 的方式,您最好使用 csv 模块打开文件,该模块使用指定的分隔符拆分行,并且 returns 可迭代的拆分行。

import csv
with open("Payments.txt") as myFile:
   spam_reader = csv.reader(myFile, delimiter=',')
   print (list(spam_reader))

您使用了 strip() 而不是 split()。这是您修改后的原始代码:

myFile = open("Payments.txt")
myList = []
for line in myFile:
    print(line.strip())
    myList.append(line.split()) // We use split here
myFile.close()
print(myList)

试试这个:

myList = []
for line in myFile:
    myList.append(line.strip().split(sep=','))
myFile.close()
print(myList)

需要在每个line.strip()中调用.split()函数,如下:

myFile = open("Payments.txt")

myList = []

for line in myFile:
    print(line.strip())
    myList.append(line.strip().split(","))

myFile.close()
print(myList)

结果将是您请求的结果:

>>>[['E1234','12/09/14','440','A','0']['E3431','10/01/12','320','N','120']['E0987','04/12/16','342','A','137']]

试试这个:

from pprint import pprint 

with open("Payments.txt") as myFile:
    myList = []
    for line in myFile:
        columns = line.strip().split(', ')
        myList.append(columns)

pprint(myList)

请注意 上下文管理器 的使用,它会在您完成后自动关闭您的文件,而 pretty print 库将每个不同行上的列表项。它使它更容易阅读。