Martijn Pieters 已经给出了一个简单而完整的答案,但值得学习如何自己弄清楚这些事情。它通常更快,并且不会花费您六次反对票。
首先,您可以使用的事实for line in f:
意味着它f
显然是某种列表对象,因为它可以像可以for
一样在循环中使用list
。从技术上讲,这意味着它是“可迭代的”。
也许这意味着它已经是list
? 如果是这样,你已经完成了。如果没有,该list
函数将接受任何可迭代并将其变为 a list
,因此,您只需添加即可f = list(f)
。
你怎么知道哪个?
好吧,您可以添加print(type(f))
到您的代码中并查看它打印出来的内容。如果它说list
,你就完成了;如果还有其他内容,则需要添加转换行f = list(f)
。
以交互方式完成这一切通常比在脚本中更容易:
>>> f = open(filename).readlines()
>>> type(f)
list
>>> f
['first line\n', 'second line\n', 'last line\n']
如果将其分解为多个部分,则可以分别查看每个部分的类型:
>>> filename = 'C:/foo.txt'
>>> type(filename)
str
>>> fileobj = open(filename)
>>> type(fileobj)
_io.TextIOWrapper
>>> lines = fileobj.readlines()
>>> type(lines)
list
当你把所有这些放在一行中时lines=open('C:/foo.txt').readlines()
,最终结果就像你分三步完成一样——<code>lines 是一个list
.
但是,如果您因为不知道该尝试什么而无法通过实验来解决问题怎么办?
好吧,交互式解释器具有内置帮助:
>>> fileobj = open(filename)
>>> help(fileobject.readlines)
Help on built-in function readlines:
readlines(...)
Return a list of lines from the stream.
hint can be specified to control the number of lines read: no more
lines will be read if the total size (in bytes/characters) of all
lines so far exceeds hint.
它在那里说它返回一个list
.
或者,您可以查看文档。尝试猜测readlines
可能在 3.x 中的位置实际上有点复杂,因为open
返回的东西的类型并不明显……但是您可以使用左侧的“快速搜索”,您会找到io.ioBase.readlines
,它为您提供相同的答案:
readlines(hint=-1)
从流中读取并返回行列表。可以指定提示来控制读取的行数:如果到目前为止所有行的总大小(以字节/字符为单位)超过提示,则不会再读取行。