2012-11-12 115 views
1

下面是代碼片段。我有一個文件。計算內容的大小

f = open(self.reportSavePath,'w') 
self.test = ''; 
for file in file_sorted: 
    f.write(str(os.path.getmtime(file)) + "|" + file + "\r\n") 
    self.test = self.test + str(os.path.getmtime(file)) + "|" + file + "\r\n" 
f.close() 

print("Size:",os.path.getsize(self.reportSavePath)) #Without opening file 
print("Calculated size:",len(self.test.encode()))  #After reading the contents 

我的問題是,爲什麼最後兩行給出不同的輸出?他們應該不一樣嗎?

如果有什麼原因,如何編輯與評論#Without opening file的行以匹配輸出與行註釋#After reading the contents

+0

你可以看到像自我這樣的詞,因爲我已經從我的實現中複製了片段。如果問題不清楚,請評論,我會盡我所能編輯和解釋,以獲得您的幫助 – Romaan

+0

這將返回相同的結果,如果文件以二進制模式打開? – Romaan

回答

1

你在比較蘋果和橘子。

os.path.getsizeof返回文件大小。 len(some_string)以字符形式返回字符串長度,而不管編碼爲,這會影響初始字節數。

+0

但是,它是不是我保存到文件中的相同的字符串? – Romaan

+2

@Romaan:字符串是相同的,但正如Yuval所說,'len'給出字符串中的字符數,而'getsize'則以字節爲單位返回文件的大小。一個字節不一定是一個字符,就像一個字節不一定是音樂的一秒或位圖圖像文件的一個像素一樣。 –