好的,所以我找到了一種大規模減小文件大小的方法。關鍵是,儘管我以前相信,PyTables並不會在默認情況下應用壓縮。
您可以通過使用Filters
來實現此目的。
這裏是如何工作的一個例子:
import pytables as pt
hdf5_file = pt.openFile(filename = 'myhdf5file.h5',
mode='a',
title='How to compress data')
# for pytables >= 3 the method is called `open_file`,
# other methods are renamed analogously
myfilters = Filters(complevel=9, complib='zlib')
mydescitpion = {'mycolumn': pt.IntCol()} # Simple 1 column table
mytable = hdf5_file.createTable(where='/', name='mytable',
description=mydescription,
title='My Table',
filters=myfilters)
#Now you can happily fill the table...
這裏最重要的行是Filters(complevel=9, complib='zlib')
。它指定了 壓縮級別complevel
和壓縮算法complib
。默認情況下,級別設置爲0,這意味着禁用壓縮,而9是最高壓縮級別。有關壓縮如何工作的詳細信息:HERE IS A LINK TO THE REFERENCE。 (儘管我做了,但是我錯過了這一行「PyTables的一個優點是它支持表和數組上的壓縮,儘管默認情況下它沒有使用」 )
爲什麼你有這麼小的葉子?我猜想這是你的大開銷的原因。 – filmor
從一開始就沒有確定這些葉子的外觀(它們有多少等),它們相當獨立,而且數據不直接相關。所以我寧願他們分開。儘管如此,我還是不介意一些開銷,但是一千倍以上似乎難以處理。我的意思是存儲100個節點需要2.4 MB,真的嗎? – SmCaterpillar
預先分配幾個K每個葉子似乎是一個合理的默認值,不是嗎? – filmor