【发布时间】:2019-02-18 02:30:11
【问题描述】:
对不起,如果这是h5py 上的一个非常基本的问题。
我正在阅读文档,但没有找到类似的示例。
我正在尝试使用 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:“无法打开对象(对象‘data1’不存在)”
如果我追加数据,则需要先以'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: 无法创建链接(名称已存在)
根据文档,数据应该是连续存储的,但是我没有找到如何避免覆盖数据。
如何仅使用一条语句将数据存储在先前关闭的 hdf5 上?
【问题讨论】:
-
您能否尝试重新启动 python(或您的 ide)以确保所有文件都已关闭。我假设您的第一次尝试使文件保持打开状态,因为它以异常退出。
-
所以你基本上不想在
'a'模式下打开文件?还是我理解错了你的问题? -
@Daniel 我收到异常后正在关闭文件。我正在尝试找到一种方法来使用同一行来写入和附加数据。
-
@AnandSKumar 我想使用一种单一模式来写入或附加数据。这将从循环中调用,如果我使用
'a'模式,则必须先前在循环外以'w'模式打开文件。 -
如果你想在每次运行中创建一个唯一的文件,那么你应该考虑这样命名文件,这样在每次运行中你都会生成一个新文件(可能会在名称中添加一个时间戳)。如果这不可能,您是否尝试在每次运行脚本重新创建文件之前删除该文件?