2013-07-10 25 views
11

Mam plik tekstowy, nazwijmy go goodlines.txt i chcę go załadować i utworzyć listę zawierającą każdy wiersz w pliku tekstowym.Python: AttributeError: Obiekt "_io.TextIOWrapper" nie ma atrybutu "podzielony"

Próbowałem stosując procedurę split() takiego:

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

Dlaczego mam te błędy? Czy nie w ten sposób używam split()? (Używam python 3.3.2)

Odpowiedz

16

Używasz metod str na obiekcie z otwartym plikiem.

można odczytać pliku jako listę linii, po prostu dzwoniąc list() na obiekcie pliku:

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

Ten ma zawierać znaki nowego wiersza. Możesz usunąć te z listy ze zrozumieniem:

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

Spróbuj tego:

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

open() funkcja zwraca obiekt pliku. A dla obiektu pliku nie ma metody takiej jak splitlines() lub split(). Możesz użyć dir(f), aby zobaczyć wszystkie metody obiektu pliku.

+0

To dobrze, ale nadal otrzymuję te "\ n" rzeczy na końcu każdego ... Jak mogę je usunąć bez zmiany pliku tekstowego? –

2

Nie czytasz zawartość pliku:

my_file_contents = f.read() 

Zobacz the docs dalsze informacje o

Mógłbyś, bez wywoływania read() lub readlines() pętli nad obiektu pliku:

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

Jeśli chcesz otrzymać listę (bez pytania o numer \n)

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

Zrozumienie listy robi ** nie ** rozciąga znaki nowego wiersza. Równie dobrze możesz po prostu wywołać 'list (f)', tak samo jak twój obecny kod. –

+0

@ samuele-mattiuzzo "my_list = [wiersz dla linii w f]" Zrobił ALN listę z \ n na końcu każdego, nawet, że nie znajduje się w pliku tekstowym. Ale czy powinien dzielić pracę po przeczytaniu? –

+0

Jak natychmiast zauważył pan Pieters, "\ n" i tak musi zostać rozebrany. –

Powiązane problemy