You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将数据集保存至正确的HDF5组?代码报错求解

问题:复刻文件夹结构到HDF5并存储数据集时出错

我写了一个脚本,想遍历指定文件夹,在HDF5文件里创建对应目录结构的组,再读取文件数据保存为HDF5数据集,但不知道怎么把数据集放到正确的组里,还报了错。

原代码

#Development Script Save files in groups
#Create HDF5 File name
TestFilename = 'N:/TestingPyhonHDF5/progress/automation/GroupTesting.h5'
#Set target directory to extract data 
TargetFolder = 'N:\\Measurements\\T2+\\Rx-BB001'
# giving file extensions
bin = ('.bin')
csv = ('.CSV')
tmp = ('.tmp')
head = ('.head')
ext = ('.bin', '.head', '.tmp', '.CSV')

# Create HDF5 Strucutre
with h5py.File(TestFilename,'w') as tf:
    for root, dirs, _ in os.walk(TargetFolder, topdown=True):
        #print(f'ROOT: {root}')
        # for Windows, modify root: remove drive letter and replace backslashes:
        grp_name = root[2:].replace( '\\\\', '/')
        #print(f'grp_name: {grp_name}\\n')
        tf.create_group(grp_name)

#Open HDF5 file
with h5py.File(TestFilename,'a') as tfile:
#Iterate files to send to HDF5 file
    for path, dirc, files in os.walk(TargetFolder):
        for file in files:
            if file.endswith(bin):
                # Create a dtype with the binary data format and the desired column names
                filePath = os.path.join(path, file)
                dt = np.dtype('B')
                data = np.fromfile(filePath, dtype=dt)
                df = pd.DataFrame(data)

                #Save as csv
                savetxt('TempData.csv', df, delimiter=',')

                #Read bin to HDF5
                dfBIN = pd.read_csv('TempData.csv')  
                tfile.create_dataset(grp_name/file, data=dfBIN) #put data in hdf file
                #add attrs
                os.remove("TempData.csv")
            else:
                continue

报错信息

TypeError                                 Traceback (most recent call last)
Cell In [51], line 39
     37 #Read bin to HDF5
     38 dfBIN = pd.read_csv('TempData.csv')  
---> 39 tfile.create_dataset(grp_name/file, data=dfBIN) #put data in hdf file
     40 #add attrs
     41 os.remove("TempData.csv")

TypeError: unsupported operand type(s) for /: 'str' and 'str'

错误原因

  1. 字符串拼接错误:grp_name/file是Python不支持的写法,字符串不能用/运算符拼接。
  2. 变量作用域问题:grp_name是第一个os.walk循环里的变量,在第二个循环中它只会保留最后一次循环的结果,根本不是当前文件对应的组路径。
  3. 冗余的CSV中转:把二进制数据转成DataFrame再存成CSV,又读回来存HDF5,完全是多余步骤,既浪费时间又占磁盘空间。

修复后的代码

import os
import h5py
import numpy as np

# 创建HDF5文件名
TestFilename = 'N:/TestingPyhonHDF5/progress/automation/GroupTesting.h5'
# 设置目标数据目录
TargetFolder = 'N:\\Measurements\\T2+\\Rx-BB001'
# 目标处理的文件扩展名
target_ext = '.bin'

# 一次性完成组创建和数据写入
with h5py.File(TestFilename, 'w') as tfile:
    for root, _, files in os.walk(TargetFolder):
        # 生成当前目录对应的HDF5组路径(适配Windows路径格式)
        grp_name = root[2:].replace('\\', '/')
        # 自动创建组(如果不存在),避免重复创建的问题
        current_group = tfile.require_group(grp_name)
        
        for file in files:
            if file.endswith(target_ext):
                file_path = os.path.join(root, file)
                # 直接读取二进制数据为numpy数组
                data = np.fromfile(file_path, dtype=np.uint8)
                # 在对应组下创建数据集,用文件名(不含后缀)作为数据集名称
                dataset_name = file.rsplit('.', 1)[0]
                current_group.create_dataset(dataset_name, data=data)
                
                # 可选:添加数据集属性,比如源文件路径
                # current_group[dataset_name].attrs['source_file'] = file_path

关键修复点

  • 合并流程:把创建组和写入数据的流程合并,用require_group自动处理组的创建,不用单独提前遍历。
  • 正确匹配组路径:在每个目录循环中实时生成对应组路径,确保数据存入正确的组。
  • 移除冗余步骤:直接用numpy读取二进制数据并创建HDF5数据集,跳过无意义的CSV转换。
  • 清晰的数据集命名:用文件名(不含后缀)作为数据集名称,避免扩展名干扰。

内容的提问来源于stack exchange,提问作者Andrew Little

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 18:05:25