I have a textfile, let’s call it goodlines.txt and I want to load it and make a list that contains each line in the text file.
I tried using the split() procedure like this:
>>> 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'
Why do I get these errors? Is that not how I use split()? ( I am using python 3.3.2)
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
You are using str methods on an open file object.
You can read the file as a list of lines by simply calling list() on the file object:
with open('goodlines.txt') as f:
mylist = list(f)
This does include the newline characters. You can strip those in a list comprehension:
with open('goodlines.txt') as f:
mylist = [line.rstrip('n') for line in f]
Method 2
Try this:
>>> f = open('goodlines.txt')
>>> mylist = f.readlines()
open() function returns a file object. And for file object, there is no method like splitlines() or split(). You could use dir(f) to see all the methods of file object.
Method 3
You’re not reading the file content:
my_file_contents = f.read()
See the docs for further infos
You could, without calling read() or readlines() loop over your file object:
f = open('goodlines.txt')
for line in f:
print(line)
If you want a list out of it (without n as you asked)
my_list = [line.rstrip('n') for line in f]
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0