2015-08-09 153 views
4

對不起,如果這是一個關於h5py的基本問題。如何在不覆蓋的情況下寫入hdf5文件?

我正在閱讀文檔,但沒有找到類似的例子。

我想在Python上創建多個hdf5數據集,但事實證明我關閉文件後數據將被覆蓋。

比方說,我做到以下幾點:

import numpy as np 
import h5py 
f = h5py.File('test.hdf5', 'w') 
f.create_dataset('data1', data = np.ones(10)) 
f.close() 
f = h5py.File('test.hdf5', 'w') 
f.create_dataset('data0', data = np.zeros(10)) 
f.close() 
f = h5py.File('test.hdf5', 'r') 
f["data1"].value 
f.close() 

我得到

KeyError: "Unable to open object (Object 'data1' doesn't exist)"

如果我追加數據,需要在'w'模式第一開口,然後在'a'模式追加,有兩個不同的語句。

import numpy as np 
import h5py 
f = h5py.File('test.hdf5', 'w') 
f.create_dataset('data1', data = np.ones(10)) 
f.close() 
f = h5py.File('test.hdf5', 'a') 
f.create_dataset('data0', data = np.zeros(10)) 
f.close() 
f = h5py.File('test.hdf5', 'r') 
f["data1"].value 
f.close() 

如果我開這兩種情況在'a'模式下的文件:

import numpy as np 
import h5py 
f = h5py.File('test.hdf5', 'a') 
f.create_dataset('data1', data = np.ones(10)) 
f.close() 
f = h5py.File('test.hdf5', 'a') 
f.create_dataset('data0', data = np.zeros(10)) 
f.close() 
f = h5py.File('test.hdf5', 'r') 
print(f['data1'].value) 
f.close() 

RuntimeError: Unable to create link (Name already exists)

根據該文件,數據應該被連續存儲,但我沒有找到如何避免覆蓋數據。

如何僅使用一條語句將數據存儲在以前關閉的hdf5上?

+0

你能嘗試重新啓動的Python(或IDE),確保所有文件被關閉。我假設您的第一次嘗試將文件打開,因爲它退出時出現異常。 – Daniel

+0

所以你基本上不想以''a''模式打開文件?還是我理解你錯誤地質疑? –

+0

@Daniel我在得到異常後關閉文件。我試圖找到一種方法來使用同一行來編寫和追加數據。 – ilciavo

回答

2

如果你想在每次運行中創建一個獨特的文件,那麼你應該考慮命名文件,例如將時間戳添加到文件的名稱。一個非常簡單的例子是使用datetime模塊和nowstrftime方法來創建文件名。示例 -

import datetime 
filename = "test_{}.hdf5".format(datetime.datetime.now().strftime("%Y_%m_%d_%H_%M_%S")) 

然後,您可以使用該文件名來打開該文件。


演示 -

>>> import datetime 
>>> filename = "test_{}.hdf5".format(datetime.datetime.now().strftime("%Y_%m_%d_%H_%M_%S")) 
>>> filename 
'test_2015_08_09_13_33_43.hdf5' 
相關問題