簡體   English   中英

readline() function 如何在 Python 中真正起作用?

[英]How does readline() function really work in Python?

這是我的例子:

我的文件:

abefgh
2345
6^7&8*
31
1
1

我的代碼:

handle = open('TestFile','r')
for line in handle:
    print(handle.readline())
    

output:

2345
31
1

為什么它只打印交替行?

在此處輸入圖像描述

在您的代碼中:

handle = open('TestFile','r')
for line in handle:
    print(handle.readline())

句柄中的for line in handle handle讀取了一行。 然后,您使用handle.readline()讀取下一行並打印出來。 每次迭代都會發生這種情況,因此您只能獲得每第二行。

你要:

handle = open('TestFile','r')
for line in handle:
    print(line)

此外,您希望關閉文件,理想情況下您希望確保它們關閉而不必擔心自己關閉它們,這就是上下文管理器的用途。 聽起來很復雜,其實很簡單:

with open('TestFile', 'r') as handle:
    for line in handle:
        print(line)

這是有效的,因為像handle這樣的文件句柄也是一個迭代器並提供了一個__next__方法。 這意味着您可以使用for循環它,它會一次生成一個元素的內容。 對於文本文件,這意味着每次調用其__next__方法時,無論是作為next(handle)還是在使用for循環時,它都會讀取一行並生成它。

with塊確保handle在退出with塊后立即關閉。

最后,您可能最終會想知道為什么您的行打印在它們之間有一個空行。 那是因為您的文件是一個文本文件,其中行由某種行尾字符(或 Windows 上的字符)分隔。

擺脫這些的一種方法是從行尾去除空格:

with open('TestFile', 'r') as handle:
    for line in handle:
        print(line.rstrip())

另一種方法是讀取整個文件,分割行尾,結果行將不再有行尾:

with open('TestFile', 'r') as handle:
    for line in handle.read().splitlines():
        print(line)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM