我正在学习python。如果有人可以解释以下处理文件之间的差异,那么是否可能:
file = open("file.txt")
for line in file:
#do something
file = open("file.txt")
contents = file.read()
for line in contents:
# do something
我知道在第一种情况下,文件将作为一个列表,所以我们迭代一个文件,因为我们迭代列表的元素,但在第二种情况下,我不知道如何解释如果我发生了什么首先读取文件,然后迭代它?
答案 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