在以各种方式为h5 py组赋值时,我在网上找到了一种语法的描述,我试图为此目的进行调整,但到目前为止还没有成功,任何帮助都将非常感谢。我要在两个文件之间传输的文件具有相同的组和子组结构。
这是我使用过的语法结构:
import h5py
f1 = h5py.File('file1.h5','a')
f2 = h5py.File('file2.h5','r')
f1['group1']['subgroup1'] = f2['group1']['subgroup1']
f1['group2']['subgroup2'] = 1
f1['group3']['subgroup3'] = array
f1.close()
f2.close()
我尝试将file 2的subgroup 1中的值赋给file 1中同名的子组,该子组为空。然后我想在subgroup 2中分配一个标量作为唯一的值,然后将数组的值分配给subgroup 3。我错过了什么?
虽然@Bryce建议的修复适用于我prevoided的特定示例(谢谢),但我要做的应用程序仍然无法工作:
import h5py
template = 'dump.h5' #the template file in the same directory as the notebook
filename = 'dem1.h5' #name of the file to be created
f1 = File_key_structure(filename,template) #creates an empty file demo.h5 with identical structure to a hardcoded template
ftemp = h5py.File(template,'r')
Display_structure(template,'extras',1) #lists the group keys of template as well as the subgroups of 'extras
Display_structure(filename,'extras',1) #lists the group keys of filename as well as the subgroups of 'extras'
它在第一行输出模板结构,在第二行输出文件名结构:
['dt', 'dump_cadence', 'extras', 'full_dump_cadence', 'gamma', 'header', 'is_full_dump', 'jcon', 'n_dump', 'n_step', 'prims', 't']
<HDF5 group "/extras" (4 members)>
['divB' 'fail' 'fixup' 'git_version']
['dt', 'dump_cadence', 'extras', 'full_dump_cadence', 'gamma', 'header', 'is_full_dump', 'jcon', 'n_dump', 'n_step', 'prims', 't']
<HDF5 group "/extras" (4 members)>
['divB' 'fail' 'fixup' 'git_version']
Out: <HDF5 group "/extras" (4 members)>
我也仔细检查了所有其他组,我在每种类型的作业中得到的具体错误是:
f1 = h5py.File(filename,'a')
f1['header']['prims'] = np.array([1, 2, 3, 4, 5]) #this works
f1['extras']['fixup'] = ftemp['extras']['fixup']
f1['dt'] = 1
最后两个赋值给予以下错误:
OSError: Unable to create link (name already exists)
1条答案
按热度按时间fhity93d1#
我运行你的代码没有问题,我创建了一些随机文件,所以我猜问题是由于你是分配值的文件是不存在的。
因此,我修改了您的代码,如果
file1
不存在,则在file1
中创建subgroup1
,然后将值赋给subgroups
。