逐行将文档附加到列表中

时间:2016-04-27 18:11:16

标签: python list python-3.x split strip

我试图将文本文档“付款”中的每个单词都放到一个列表中。对于每行“付款”,我希望它在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()来删除逗号中的单个单词,并删除每行末尾不可见的下一行空格。这是我到目前为止编写的代码:

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中的'自己的列表中,并且该行是整个字符串,而不是单个字符串,用逗号分隔

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

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

7 个答案:

答案 0 :(得分:2)

您需要在每个.split()上致电line

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)

答案 1 :(得分:1)

你可以做你要求的一切 - 从一个打开的文件中获取一行代码,剥离每一行,然后按Timer.getNow()分割 - 所有这一切都在一行中:

,

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

试试这个:

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

试试这个:

from pprint import pprint 

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

pprint(myList)

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

答案 6 :(得分:-1)

您使用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)