Python: AttributeError: ‘_io.textiowrapper’ object heeft geen attribuut ‘Split’

Ik heb een tekstbestand, laten we het noemen goodlines.txten ik wil het laden en een lijst maken die elke regel in het tekstbestand bevat.

Ik heb geprobeerd de split()procedure als volgt te gebruiken:

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

Waarom krijg ik deze fouten? Is dat niet hoe ik split()gebruik? (Ik gebruik python 3.3.2)


Antwoord 1, Autoriteit 100%

U gebruikt strmethoden op een open bestandsobject.

U kunt het bestand lezen als een lijst met regels door eenvoudig list()op het bestandsobject te bellen:

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

Deze bevat de nieuwlijntekens op. U kunt die in een lijst begrijpen:

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

Antwoord 2, Autoriteit 23%

Probeer dit:

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

open()functie retourneert een bestandsobject. En voor bestandsobjecten is er geen methode zoals splitlines()of split(). Je zou dir(f)kunnen gebruiken om alle methoden van het bestandsobject te zien.


Antwoord 3, autoriteit 19%

Je leest de inhoud van het bestand niet:

my_file_contents = f.read()

Zie de documentenvoor meer informatie

Je zou, zonder read()of readlines()aan te roepen, over je bestandsobject kunnen lopen:

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

Als je er een lijst van wilt hebben (zonder \nzoals je vroeg)

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

Other episodes