我有一個文件大小爲10240字節。這是我的腳本來獲得文件大小:Python:爲什麼我從不同於sys.getsizeof()的文件讀取大小?
fh = open(name, "r")
data = fh.read(10240)
print sys.getsizeof(data)
輸出:10277
我讀10240個字節從文件,但是當我打印的大小,我得到10277.我如何確保我不讀取超過10240字節?我應該向我的消費者發送10240字節,但看起來它正在發送更多。
我有一個文件大小爲10240字節。這是我的腳本來獲得文件大小:Python:爲什麼我從不同於sys.getsizeof()的文件讀取大小?
fh = open(name, "r")
data = fh.read(10240)
print sys.getsizeof(data)
輸出:10277
我讀10240個字節從文件,但是當我打印的大小,我得到10277.我如何確保我不讀取超過10240字節?我應該向我的消費者發送10240字節,但看起來它正在發送更多。
要獲得長度的data
,請使用len(data)
。假設你的文件足夠大,len(data)
將等於10240;它不會超出你的要求。
sys.getsizeof()
返回內存中Python對象的總大小,包括運行時使用的任何額外開銷。它在大多數Python應用程序中通常都不是很有用。
getsizeof()調用對象的的sizeof方法,如果目的是通過垃圾收集器管理增加了額外的垃圾收集器的開銷。
所以你從getsizeof
獲得額外的大小實際上是垃圾收集數據的Python增加了bytes
對象,因此它知道如何刪除該文件中的數據,當你用它做,和其他任何只有運行時需要知道的數據。
當您序列化bytes
對象以將其發送給您的使用者時,此開銷將被序列化器丟棄,所以不用擔心。如果您需要知道實際發送了多少個字節,請使用len()
函數。
謝謝Jonathon。那麼我怎樣才能讀取字節而不是字符呢? – NoName
在Python 2中,沒有區別。像'file.read()'這樣的東西返回的所有「緩衝區」都是'str'類型,就像任何其他字符串一樣。 –
'fh = open(name,「rb」)'將讀取python 2和3中的字節。 – tdelaney