2016-09-29 69 views
1

我是一名Python初學者。但是,當我嘗試使用readline()方法時遇到一些問題。困惑於Python中的readline()return

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()是根本不工作。 但是,當我禁用打印a.read()時,readline()恢復工作。

這使我困惑不已。有什麼解決方案可以同時使用read()和readline()?

+7

'read()'讀取所有內容(或將嘗試)。之後,你已經到達文件'a'的末尾,所以沒有什麼可以用'readline()'來讀取。 – Evert

+0

@ cricket_007可能是一個糟糕的鍵盤或壞眼鏡的結果。 – Evert

+1

您可以在'a.read()'和第一個'a.readline()'之間執行'a.seek(0)'。我不明白你爲什麼想這樣做。 – DeepSpace

回答

5

當你打開一個文件時,你會得到一個指向文件某處的指針(默認情況下:開始)。現在,只要您運行.read().readline()此指針移動:

  1. .read()讀,直到文件的末尾和指針移動到最後(任何讀數從而進一步呼籲給予什麼)
  2. .readline()讀取直到換行看出,並將其設置
  3. .read(X)讀取X字節,並設置在指針後CURRENT_LOCATION + X指針(或端部)

如果希望則可以手動移動是p通過發出a.seek(X)呼叫,其中X是文件中的一個地方(看作是一個字節數組)。例如,這應該給你想要的輸出:

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

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

看來readline()根本不起作用。

它按預期工作。沒有行可讀。

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

因爲指針是在文件的開頭,和線可以閱讀

有沒有辦法,我可以使用讀取任何解決方案()和readline()在同一時間?

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

另外,不要忘記關閉文件,當你讀完這

+2

我覺得有趣的是,你忘記關閉句子,你談論忘記關閉一些事情:-)(關閉一段時間,我的意思是) –

0

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

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

因此,請嘗試將呼叫先放入readline。你會注意到,現在read調用不會返回整個文件,只剩下其餘的行(可能沒有),這取決於你調用readline的次數。並尋找並告訴確認發生了什麼事情。

詳情here