44

我有一个文本文件,让我们调用它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

4

3 回答 3

47

您正在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]
于 2013-07-10T11:57:12.530 回答
12

尝试这个:

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

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

于 2013-07-10T11:44:43.363 回答
9

您没有阅读文件内容:

my_file_contents = f.read()

有关更多信息,请参阅文档

您可以,无需调用read()readlines()循环您的文件对象:

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

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

my_list = [line.rstrip('\n') for line in f]
于 2013-07-10T11:45:52.487 回答