簡體   English   中英

對readline()在Python中返回感到困惑

[英]confused about the readline() return in Python

我是python的初學者。 但是,當我嘗試使用readline()方法時遇到一些問題。

f=raw_input("filename> ")
a=open(f)
print a.read()
print a.readline()
print a.readline()
print a.readline()

我的txt文件是

aaaaaaaaa
bbbbbbbbb
ccccccccc

但是,當我嘗試在Mac終端上運行它時,得到了以下信息:

aaaaaaaaa
bbbbbbbbb
ccccccccc

似乎readline()根本不起作用。 但是,當我禁用print a.read()時,readline()恢復工作。

這讓我很困惑。 有什么解決方案可以同時使用read()和readline()嗎?

打開文件時,您將獲得一個指向文件某個位置的指針(默認情況下:開頭)。 現在,無論何時運行.read().readline()此指針都會移動:

  1. .read()讀取直到文件的末尾,並將指針移到末尾(因此進一步調用任何讀取都不會產生任何結果)
  2. .readline()讀取直到看到換行符並在其后設置指針
  3. .read(X)讀取X個字節並將指針設置為CURRENT_LOCATION + X (或末尾)

如果願意,可以通過發出a.seek(X)調用來手動移動該指針,其中X是文件中的位置(以字節數組表示)。 例如,這應該為您提供所需的輸出:

print a.read()
a.seek(0)
print a.readline()
print a.readline()
print a.readline()

您需要了解文件指針的概念。 當您讀取文件時,它已被完全消耗,並且指針位於文件的末尾。

似乎readline()根本不起作用。

它按預期工作。 沒有要閱讀的行。

當我禁用print a.read()時,readline()恢復工作。

因為指針位於文件的開頭,所以可以讀取行

有什么解決方案可以同時使用read()和readline()嗎?

當然。 翻轉讀取幾行的順序,然后翻轉文件的其余部分,或者將文件指針找回您想要的位置。

另外,讀完文件后不要忘記關閉文件

文件對象a記住它在文件中的位置。

  • a.read()從當前位置讀取到文件的末尾(將位置移動到文件的末尾)
  • a.readline()從當前位置讀取到行尾(將位置移動到下一行)
  • a.seek(n)移動到文件中的位置n(不返回任何內容)
  • a.tell()返回文件中的位置。

因此,請嘗試先將呼叫置於readline。 您會注意到,現在,read調用將不會返回整個文件,僅返回其余的行(也許沒有),這取決於您調用readline的次數。 並與尋求和告訴,以確認發生了什么事。

詳細信息在這里

暫無
暫無

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

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