[英]Alternatives to `tell()` while iterating over lines of a file in Python3?
[英]Iterating over lines in a file python
我正在學習蟒蛇。 如果有人可以解釋以下處理文件的不同之處,是否有可能:
file = open("file.txt")
for line in file:
#do something
file = open("file.txt")
contents = file.read()
for line in contents:
# do something
我知道在第一種情況下,該文件將充當一個列表,因此我們在迭代列表元素時迭代一個文件,但在第二種情況下,我不確定如何解釋讀取文件時會發生什么首先,然后迭代它?
在第一個中,您正在逐行迭代文件。 在這種情況下,整個文件數據不會一次讀入內存; 相反,只有當前行被讀入內存。 這對於處理非常大的文件很有用,並且如果您不知道文件是否會很大,則有利於穩健性。
在第二個中, 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
第二種情況將文件的內容讀入一個大字符串。 如果你遍歷一個字符串,你會依次得到每個字符。 如果你想依次得到每一行,你可以這樣做:
for line in contents.split('\n'):
# do something
或者,您可以使用readlines()
而不是read()
將內容作為行列表read()
。
with open('file.txt','r') as fin:
lines = fin.readlines()
for line in lines:
# do something
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.