Martijn Pieters 已经给出了一个简单而完整的答案,但值得学习如何自己解决这些问题。它通常更快,而且不会花费你六次投票。
首先,您可以使用for line in f: 的事实意味着f 显然是某种列表对象,因为它可以在for 循环中使用,就像list 一样。从技术上讲,这意味着它是“可迭代的”。
也许这意味着它已经是list?如果是这样,你已经完成了。如果没有,list 函数将接受任何可迭代并将其转换为 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(),最终结果与您分三步完成的结果相同——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。
或者,您可以查看the documentation。尝试猜测 readlines 在 3.x 中的位置实际上有点复杂,因为 open 返回的事物类型并不明显……但您可以使用左侧的“快速搜索”,您将找到io.ioBase.readlines,给你同样的答案:
readlines(hint=-1)
从流中读取并返回行列表。可以指定提示来控制读取的行数:如果到目前为止所有行的总大小(以字节/字符为单位)超过提示,则不会再读取行。