迭代文件python中的行

Hom*_*map 8 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
Run Code Online (Sandbox Code Playgroud)

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

Ana*_*mar 18

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

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

显示此行为的示例 -

a.txt文件包含 -

Hello
Bye
Run Code Online (Sandbox Code Playgroud)

>>> 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
Run Code Online (Sandbox Code Playgroud)

  • 第二个读取内存中的整个文件,而第一个,每次迭代一行.也就是说,第一个是内存效率,特别是对于大文件. (3认同)

khe*_*ood 11

第二种情况将文件的内容读入一个大字符串。如果你遍历一个字符串,你会依次得到每个字符。如果你想依次得到每一行,你可以这样做:

for line in contents.split('\n'):
     # do something
Run Code Online (Sandbox Code Playgroud)

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

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