我什么时候应该使用file.read()或file.readlines()?

Dav*_*eli 20 python io timeit

我注意到如果我遍历我打开的文件,迭代它而不"读取"它会快得多.

l = open('file','r')
for line in l:
    pass (or code)
Run Code Online (Sandbox Code Playgroud)

比...快得多

l = open('file','r')
for line in l.read() / l.readlines():
    pass (or code)
Run Code Online (Sandbox Code Playgroud)

第二个循环将花费大约1.5倍的时间(我在完全相同的文件上使用timeit,结果是0.442对0.660),并且会得到相同的结果.

那么 - 我什么时候应该使用.read()或.readlines()?

因为我总是需要迭代我正在阅读的文件,并且在经过艰难的学习之后,.read()对大数据的缓慢感觉 - 我似乎无法想象再次使用它.

小智 16

对您的问题的简短回答是,这三种读取文件位的方法中的每一种都有不同的用例.如上所述,f.read()将文件作为单独的字符串读取,因此允许相对容易的文件范围操作,例如文件范围的正则表达式搜索或替换.

f.readline()读取文件的一行,允许用户解析单行而不必读取整个文件.使用f.readline()还可以更容易地在读取文件时应用逻辑,而不是逐行完成迭代,例如文件在中途改变格式时.

使用该语法for line in f:允许用户逐行遍历文件,如问题中所述.

(如其他答案中所述,本文档阅读量非常好):

https://docs.python.org/2/tutorial/inputoutput.html#methods-of-file-objects

编辑:之前声称readline()可用于在for循环迭代期间跳过一行.但是,这在python 2.7中不起作用,也许是一个值得怀疑的做法,因此该声明已被删除.

编辑:添加了f.readline()和f.read()的用例示例

  • 在文件上将`readline`和`for`循环混合在一起实际上是行不通的。`readline`不理解`next`实现的缓冲。如果要跳过“ for”循环中的一行,则应在文件上调用“ next”。 (2认同)