【问题标题】:Appending a document line by line to a list [duplicate]将文档逐行附加到列表中[重复]
【发布时间】:2016-04-27 18:11:16
【问题描述】:

我正在尝试将文本文档“付款”中的每个单词放入一个列表中。对于每一行“付款”,我希望它在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 内的自己的列表中,并且该行是一个完整的字符串,而不是单个字符串,用逗号分隔。

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

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

【问题讨论】:

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


    【解决方案1】:

    您需要在每个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)
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        试试这个:

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

        【讨论】:

          【解决方案4】:

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

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

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

          【讨论】:

            【解决方案5】:

            需要在每个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']]
            

            【讨论】:

              【解决方案6】:

              试试这个:

              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 库会将列表中的每个项目放在不同的行上.它使阅读更容易。

              【讨论】:

                【解决方案7】:

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

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2015-08-05
                  • 1970-01-01
                  • 1970-01-01
                  • 2021-03-30
                  • 2013-06-18
                  • 1970-01-01
                  • 2015-09-05
                  • 2018-05-11
                  相关资源
                  最近更新 更多