2016-04-27 8 views
1

Ich versuche, jedes Wort im Textdokument "Zahlungen" in eine Liste zu bekommen. Für jede Zeile von „Zahlungen“, ich will es in einer Liste in myList, so würde es in etwa so aussehen:Ein Dokument zeilenweise an eine Liste anhängen

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

Ich brauche .split() und .strip(), um zu verwenden, um einzelne Worte aus dem Komma zu entfernen und Entferne den unsichtbaren nächsten Zeilenabstand am Ende jeder Zeile. Das ist mein Code, den ich bisher geschrieben habe:

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

Das Programm funktioniert, aber nicht in der Art, wie ich beabsichtige es zu arbeiten. Das Programm ergab folgende:

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

Es das Dokument in myList beigefügten hat, aber es hat nicht gesetzt jede Zeile, in ihre eigenen Liste innerhalb myList und die Linie ist eine ganze Reihe, nicht einzelne Strings, getrennt durch ein Komma.

Ich versuche, hätte .split(',') am Ende for line in myFile: Zugabe, aber es eine Fehlermeldung angezeigt:

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

Antwort

2

Sie müssen .split() auf jeden line nennen:

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

Oder in einer Zeile mit einem list comprehension:

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

Oder können Sie auch ein csv module:

import csv 

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

print(myList) 
1

Sie können für alles, was Sie tun, fragen - eine Liste von Zeilen aus einer geöffneten Datei bekommen, jede Zeile Strippen und Spaltung von , - alles in einer einzigen Zeile:

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

Das Problem mit Ihrem Ansatz ist, dass Sie die Zeilen nicht geteilt haben, nachdem Sie sie gelesen haben.

Als eine eher pythische Art, öffnen Sie besser Ihre Datei mit csv Modul, das die Zeilen mit einem angegebenen Trennzeichen aufteilt, und gibt eine iterable Split-Linien zurück.

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

verwendet Sie strip() statt split().Hier ist Ihre Original-Code zu arbeiten geändert:

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

Try this:

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

Sie benötigen die .split() Funktion in jedem line.strip() nennen, wie folgt:

myFile = open("Payments.txt") 

myList = [] 

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

myFile.close() 
print(myList) 

Das Ergebnis wird Sie sind derjenige, den Sie anfordern:

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

Versuchen Sie folgendes:

from pprint import pprint 

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

pprint(myList) 

Beachten Sie die Verwendung des Kontextmanager, dass Ihre Datei automatisch schließt, sobald Sie und die hübschen Druck Bibliothek fertig sind, die auf einer anderen Zeile jedes Element der Liste legt . Es erleichtert das Lesen.