Python:AttributeError:'_ io.TextIOWrapper'对象没有属性'split'

时间:2013-07-10 11:38:20

标签: python python-3.x

我有一个文本文件,我们称之为goodlines.txt,我想加载它并创建一个包含文本文件中每一行的列表。

我尝试使用split()这样的程序:

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

为什么我会收到这些错误?这不是我使用split()的方式吗? (我正在使用python 3.3.2

3 个答案:

答案 0 :(得分:25)

您在打开的文件对象上使用str方法。

您只需在文件对象上调用list()即可将该文件作为行列表读取:

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

包含换行符。你可以在列表理解中删除那些:

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

答案 1 :(得分:6)

试试这个:

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

open()函数返回一个文件对象。对于文件对象,没有像splitlines()split()这样的方法。您可以使用dir(f)查看文件对象的所有方法。

答案 2 :(得分:3)

您没有阅读文件内容:

my_file_contents = f.read()

有关更多信息,请参阅the docs

您可以在不调用read()readlines()的情况下循环遍历文件对象:

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

如果你想要一个列表(没有\n你提出的话)

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