2009-08-03 172 views
1

試圖理解你應該如何在Python中讀取文件。這是我做了什麼,它是不工作很恰當:閱讀python中的文件

import os.path 

filename = "A 180 mb large file.data" 
size = os.path.getsize(filename) 

f = open(filename, "r") 
contents = f.read() 
f.close() 

print "The real filesize is", size 
print "The read filesize is", len(contents) 

f = open(filename, "r") 

size = 0 

while True: 
    contents = f.read(4) 
    if not contents: break 
    size += len(contents) 

f.close() 

print "this time it's", size 

輸出:

The real filesize is 183574528 
The read filesize is 10322 
this time it's 13440 

有人知道什麼怎麼回事? :)

+1

你在Windows上嗎?如果使用模式「rb」打開文件會發生什麼情況? – Amber 2009-08-03 20:25:52

回答

5

如果您的文件混淆了C庫,那麼您的結果是預期的。

操作系統認爲它是180Mb。

但是,有零散的字節,可能會混淆C stdio庫。

嘗試用「rb」打開文件,看看你是否得到不同的結果。

3

首先是在字節的文件大小,你讀的文件爲文本和其他時間算字符。將所有open(filename, "r")更改爲open(filename, "rb"),它的工作原理。

+0

那麼如何檢查字節大小的字節?因爲這是你得到的,是不是,從f.read字符串?假設我想將文件從一臺計算機發送到另一臺計算機,並且它是一個大文件,因此必須逐張發送。首先,發送計算機會發送文件的大小,所以另一臺計算機會知道該期待什麼。然後它會開始發送文件。另一臺計算機將不得不計算它已經獲得了多少字節,所以它會知道整個文件何時被髮送。那麼你如何檢查? – quano 2009-08-04 00:07:17

0

這不是關於字符串:Python完全滿意字符串中的空字節。

這是因爲你在Windows上,並且你在文本模式下打開文件,所以它將所有「\ n」轉換爲「\ r \ n」,從而破壞你所有的二進制數據。

用模式「rb」以二進制模式打開文件