代码之家  ›  专栏  ›  技术社区  ›  user6178315

逐行将文档附加到列表[重复]

  •  1
  • user6178315  · 技术社区  · 10 年前

    我正在尝试将文本文档“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() 以便从逗号中删除单个单词,并删除每行末尾不可见的下一行空格。这是我迄今为止编写的代码:

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

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

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

    AttributeError: '_io.TextIOWrapper' object has no attribute 'split'
    
    7 回复  |  直到 10 年前
        1
  •  2
  •   alecxe    10 年前

    你需要打电话 .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)
    
        2
  •  1
  •   Akshat Mahajan    10 年前

    你可以做任何你想做的事情——从一个打开的文件中获取一个行列表,剥离每一行,然后按 , -全部在一行中:

    myList = map(lambda line: line.strip().split(","), myFile.readlines())
    
        3
  •  0
  •   Carlos Mermingas noxdafox    10 年前

    试试这个:

    myList = []
    for line in myFile:
        myList.append(line.strip().split(sep=','))
    myFile.close()
    print(myList)
    
        4
  •  0
  •   Mazdak    10 年前

    你的方法有一个问题,那就是你读过之后没有把行分开。

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

    import csv
    with open("Payments.txt") as myFile:
       spam_reader = csv.reader(myFile, delimiter=',')
       print (list(spam_reader))
    
        5
  •  0
  •   Carlos Parra    10 年前

    你需要打电话给 .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']]
    
        6
  •  0
  •   cyberbikepunk    10 年前

    试试这个:

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

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

        7
  •  -1
  •   Mate Hegedus    10 年前

    你用过 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)
    
    推荐文章