python 从一个h5py文件到另一个h5py文件的分组传输值

m3eecexj  于 2023-05-05  发布在  Python
关注(0)|答案(1)|浏览(264)

在以各种方式为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)
fhity93d

fhity93d1#

我运行你的代码没有问题,我创建了一些随机文件,所以我猜问题是由于你是分配值的文件是不存在的。
因此,我修改了您的代码,如果file1不存在,则在file1中创建subgroup1,然后将值赋给subgroups

import h5py 
import numpy as np

f1 = h5py.File('file1.h5', 'a')
f2 = h5py.File('file2.h5', 'r')

if 'subgroup1' not in f1['group1']:
    f1['group1'].create_group('subgroup1')

f1['group1']['subgroup1'] = f2['group1']['subgroup1']
f1['group2']['subgroup2'] = 1 
f1['group3']['subgroup3'] = np.array([1, 2, 3])

f1.close()
f2.close()

相关问题