2015-08-09 152 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' 
相关问题