使用h5py合并多个.h5文件报错ValueError:原因及解决方法
问题原因
你调用data_file.copy('/', combined_file)时,试图将每个源H5文件的根目录直接复制到合并文件的根目录,但h5py不支持这种操作:
- 合并文件的根目录无法作为复制的目标容器
- 多个文件重复复制根目录会导致命名冲突
所以报错提示“未指定目标名称”。
修复方案
给每个源文件的内容在合并文件中创建一个独立的子组(比如用源文件的文件名作为子组名),明确指定复制的目标位置。有两种简洁的实现方式:
方式1:指定copy方法的name参数
直接通过name参数指定目标子组的名称,一次性复制根目录下所有内容:
import os import h5py with h5py.File(combined_file_path, "w") as combined_file: for file_path in file_paths: with h5py.File(file_path, "r") as data_file: # 提取文件名(不含后缀)作为子组名称 group_name = os.path.splitext(os.path.basename(file_path))[0] # 复制源文件根目录内容到合并文件的指定子组 data_file.copy('/', combined_file, name=group_name)
方式2:先创建子组再逐个复制内容
手动创建子组,然后遍历源文件的所有数据集/子组复制过去,适合需要过滤内容的场景:
import os import h5py with h5py.File(combined_file_path, "w") as combined_file: for file_path in file_paths: with h5py.File(file_path, "r") as data_file: group_name = os.path.splitext(os.path.basename(file_path))[0] # 创建目标子组 target_group = combined_file.create_group(group_name) # 遍历源文件根目录下的所有对象并复制 for key in data_file.keys(): data_file.copy(key, target_group)
两种方式都能解决报错,最终合并后的H5文件会以每个源文件的文件名作为子组,每个子组里包含对应源文件的数据集。
内容的提问来源于stack exchange,提问作者vk21
相关产品推荐
相关产品推荐

