2017-02-23 92 views
1

我有一個文件大小爲10240字節。這是我的腳本來獲得文件大小:Python:爲什麼我從不同於sys.getsizeof()的文件讀取大小?

fh = open(name, "r") 
data = fh.read(10240) 
print sys.getsizeof(data) 

輸出:10277

我讀10240個字節從文件,但是當我打印的大小,我得到10277.我如何確保我不讀取超過10240字節?我應該向我的消費者發送10240字節,但看起來它正在發送更多。

回答

6

要獲得長度data,請使用len(data)。假設你的文件足夠大,len(data)將等於10240;它不會超出你的要求。

sys.getsizeof()返回內存中Python對象的總大小,包括運行時使用的任何額外開銷。它在大多數Python應用程序中通常都不是很有用。

+0

謝謝Jonathon。那麼我怎樣才能讀取字節而不是字符呢? – NoName

+0

在Python 2中,沒有區別。像'file.read()'這樣的東西返回的所有「緩衝區」都是'str'類型,就像任何其他字符串一樣。 –

+0

'fh = open(name,「rb」)'將讀取python 2和3中的字節。 – tdelaney

1

From the Python 3.6 docs:

getsizeof()調用對象的的sizeof方法,如果目的是通過垃圾收集器管理增加了額外的垃圾收集器的開銷。

所以你從getsizeof獲得額外的大小實際上是垃圾收集數據的Python增加了bytes對象,因此它知道如何刪除該文件中的數據,當你用它做,和其他任何只有運行時需要知道的數據。

當您序列化bytes對象以將其發送給您的使用者時,此開銷將被序列化器丟棄,所以不用擔心。如果您需要知道實際發送了多少個字節,請使用len()函數。