2013-07-10 33 views
11

Ich habe eine Textdatei, nennen wir es goodlines.txt und ich möchte es laden und eine Liste erstellen, die jede Zeile in der Textdatei enthält.Python: AttributeError: '_io.TextIOWrapper' Objekt hat kein Attribut 'Split'

ich die split() Verfahren wie diese versuchte, mit:

>>> f = open('goodlines.txt') 
>>> mylist = f.splitlines() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: '_io.TextIOWrapper' object has no attribute 'splitlines' 
>>> mylist = f.split() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: '_io.TextIOWrapper' object has no attribute 'split' 

Warum erhalte ich diese Fehlermeldung? Ist das nicht, wie ich split() verwende? (Ich verwende python 3.3.2)

Antwort

16

Sie verwenden str Methoden für ein geöffnetes Dateiobjekt.

Sie können die Datei als eine Liste von Zeilen lesen einfach durch list() auf das Dateiobjekt aufrufen:

with open('goodlines.txt') as f: 
    mylist = list(f) 

Diese hat sind die Zeilenumbrüche.

with open('goodlines.txt') as f: 
    mylist = [line.rstrip('\n') for line in f] 
4

Versuchen Sie folgendes:

>>> f = open('goodlines.txt') 
>>> mylist = f.readlines() 

open() Funktion gibt ein Dateiobjekt. Und für das Dateiobjekt gibt es keine Methode wie splitlines() oder split(). Sie können dir(f) verwenden, um alle Methoden des Dateiobjekts anzuzeigen.

+0

Das ist in Ordnung, aber ich bekomme immer wieder diese „\ n“ Dinge am Ende jeder ... Wie kann ich sie entfernen, ohne die Text-Datei zu ändern: Sie können die in einer Liste Verständnis Streifen? –

2

Sie lesen nicht den Dateiinhalt:

my_file_contents = f.read() 

Siehe the docs für weitere Infos

Sie könnten ohne read() oder readlines() Schleife über die Dateien Objekt aufrufen:

f = open('goodlines.txt') 
for line in f: 
    print(line) 

Wenn Sie eine Liste davon möchten (ohne \n wie Sie gefragt)

my_list = [line.rstrip('\n') for line in f] 
+2

Das Listenverständnis löst ** nicht ** Zeilenumbrüche aus. Sie können stattdessen auch 'list (f)' aufrufen, mit dem gleichen Effekt wie Ihr aktueller Code. –

+0

@ samuele-mattiuzzo "my_list = [Zeile für Zeile in f]" AUCH eine Liste mit \ n am Ende von jedem gemacht, auch wenn es nicht in der Textdatei ist. Aber sollte die Arbeit beim Lesen unterbrochen werden? –

+0

Wie Herr Pieters prompt darauf hingewiesen hat, muss das '\ n 'trotzdem weggestreift werden. –

Verwandte Themen