2013-07-27 43 views
0

在蟒我可以寫確保file.read將讀取整個文件?

content = open(filename, 'r').read() 

讀取整個文件到content變量。但是,在我的Windows 2.7.5機器上,這隻能讀取一些大文件的255個字節。仔細看一下file.read的文檔,可以發現只能預期在阻塞模式下讀取整個文件。如何啓用阻止模式以確保讀取整個文件?

read(...) 
    read([size]) -> read at most size bytes, returned as a string. 

    If the size argument is negative or omitted, read until EOF is reached. 
    Notice that when in non-blocking mode, less data than what was requested 
    may be returned, even if no size parameter was given. 
+1

嘗試'open(filename,'rb')'。 – zhangyangyu

+0

這有效!你能解釋爲什麼嗎? – user11171

+0

我不知道爲什麼其他地方我看到了。 ( – zhangyangyu

回答

4

我遇到問題的文件是一個tarball,一個zip文件和一個大小約爲5 MiB的Windows可執行文件(安裝程序)。

您正在以文本模式打開二進制文件。然後,讀取將在Windows上遇到文件結束標記時結束。它也將在Windows上將'\r\n'的Windows行結尾轉換爲'\r'

通過添加'b'標誌,您可以在二進制模式下打開它,這會準確地返回文件中的內容。

除此之外,如果以文本模式打開,Python 3將嘗試將文件數據解碼爲Unicode。所以總是以二進制模式打開二進制文件。

0

您可能想要使用open(fn,「rb」)以二進制模式打開它。 Windows和Linux有不同的編碼和解碼。當你以二進制模式打開一個文件並從中讀取數據時,你得到的是一個字節對象。輸入沒有解碼,輸出沒有編碼。當一個字節對象被讀取或寫入時,您會獲得傳輸的數據,而不會嘗試對其進行更改。