如何批量处理500个文件夹中的同名文件并合并输出到同一CSV?
批量处理H5文件并合并结果到单个CSV:可行方案
完全可行,只需对原代码做批量遍历和结果收集的修改,以下是具体实现:
修改后的完整代码
import h5py import numpy as np import os # 根目录:包含1-500文件夹的父目录 root_dir = '/Users/D/Desktop/Files500' # 存储所有处理后的数据 all_processed_data = [] # 遍历1到500的文件夹 for folder_num in range(1, 501): # 构建当前H5文件的路径 h5_file_path = os.path.join(root_dir, str(folder_num), 'FIELD-3D.h5') # 读取H5文件中的数据 with h5py.File(h5_file_path, 'r') as h5_file: raw_data = np.array(h5_file['Zone']['TOp']['data']) # 扁平化数据 flattened_data = raw_data.flatten(order='C') # 执行插值处理(修正原代码中x未定义的问题) iter_num = 10 current_idx = iter_num original_length = len(flattened_data) while current_idx < original_length: # 在指定位置插入相邻元素的平均值 flattened_data = np.insert(flattened_data, current_idx, (flattened_data[current_idx] + flattened_data[current_idx-1])/2) current_idx += iter_num original_length += 1 # 插入元素后数组长度增加,更新基准长度 # 将当前文件的处理结果加入列表 all_processed_data.append(flattened_data) # 合并所有数据并保存到CSV # 情况1:每个文件的处理结果作为一行(要求所有处理后的数据长度相同) # np.savetxt('merged.csv', np.array(all_processed_data), delimiter=',', fmt='%f') # 情况2:所有数据拼接成一维数组(适用于长度不同的情况) merged_data = np.concatenate(all_processed_data) np.savetxt('merged.csv', merged_data, delimiter=',', fmt='%f')
关键修改说明
- 批量遍历:通过
range(1,501)循环遍历所有文件夹,动态构建每个H5文件的路径,避免硬编码单个路径。 - 文件资源管理:使用
with语句自动管理H5文件的打开与关闭,避免资源泄漏。 - 修正原代码缺陷:原代码中
x未定义,这里改用original_length跟踪数组长度,每次插入元素后更新该值,确保循环逻辑正确。 - 结果收集与合并:先将每个文件的处理结果存入列表,最后一次性合并写入CSV,避免多次写入导致文件内容被覆盖。
根据你的需求选择对应的合并方式:如果每个文件处理后的数据长度一致,用情况1按行保存;如果长度不同,用情况2拼接成一维数组保存。
内容的提问来源于stack exchange,提问作者MONtana9999
相关产品推荐
相关产品推荐

