迭代文件python中的行

时间:2015-07-28 08:57:51

标签: python

我正在学习python。如果有人可以解释以下处理文件之间的差异,那么是否可能:

file = open("file.txt")
for line in file:
    #do something

file = open("file.txt")
contents = file.read()
for line in contents:
    # do something

我知道在第一种情况下,文件将作为一个列表,所以我们迭代一个文件,因为我们迭代列表的元素,但在第二种情况下,我不知道如何解释如果我发生了什么首先读取文件,然后迭代它?

2 个答案:

答案 0 :(得分:15)

在第一个中,您逐行遍历文件。在这种情况下,整个文件数据不会被读入内存,而只会将当前行读入内存,这对于处理非常大的文件非常有用。

在第二个中,file.read()将完整的文件数据作为字符串返回,当您对其进行迭代时,实际上是在逐个字符地迭代文件的数据。这会将完整的文件数据读入内存。

显示此行为的示例 -

a.txt文件包含 -

Hello
Bye

代码

>>> f = open('a.txt','r')
>>> for l in f:
...     print(l)
...
Hello

Bye


>>> f = open('a.txt','r')
>>> r = f.read()
>>> print(repr(r))
'Hello\nBye'
>>> for c in r:
...     print(c)
...
H
e
l
l
o


B
y
e

答案 1 :(得分:4)

第二种情况是将文件内容读入一个大字符串。如果迭代字符串,则依次获取每个字符。如果你想依次得到每一行,你可以这样做:

for line in contents.split('\n'):
     # do something

或者您可以使用readlines()代替read()将内容列为行列表。

with open('file.txt','r') as fin:
    lines = fin.readlines()
for line in lines:
    # do something