如何批量将100份X射线散射.dat文件转换为带指定表头的.csv文件
批量转换X射线散射.dat文件为.csv的实现方案
前置说明
确保所有待转换的.dat文件存放在同一个目录下,本地环境已安装pandas库。
完整实现代码
import os import pandas as pd # 可修改配置项 dat_dir = "./your_dat_path" # 替换为.dat文件所在的文件夹路径 output_dir = "./converted_csv" # 转换后.csv文件的保存路径 headerList = ['q(A^-1)', 'I(q)', 'sqrt(I(q))'] # 自动创建输出目录,已存在时不报错 os.makedirs(output_dir, exist_ok=True) # 遍历所有.dat文件执行转换 for file_name in os.listdir(dat_dir): # 仅处理后缀为.dat的文件 if file_name.lower().endswith(".dat"): # 拼接完整文件路径 full_dat_path = os.path.join(dat_dir, file_name) # 读取.dat文件:跳过前11行%开头的元数据,按空白符分割列 df = pd.read_csv( full_dat_path, skiprows=11, sep="\s+", header=None ) # 生成对应.csv文件名,保留原始文件名前缀 csv_name = os.path.splitext(file_name)[0] + ".csv" full_csv_path = os.path.join(output_dir, csv_name) # 导出为.csv,添加指定表头、不保留索引列 df.to_csv(full_csv_path, header=headerList, index=False) print(f"已转换:{file_name} → {csv_name}") # 统计处理总数 total = len([f for f in os.listdir(dat_dir) if f.lower().endswith(".dat")]) print(f"全部转换完成,共处理{total}个文件")
关键逻辑说明
- 自动过滤非.dat格式文件,避免误处理目录下的其他文件
- 针对你提供的.dat格式设置
skiprows=11,直接跳过头部元数据读取数值部分;如果不同文件的注释行数不一致,可以把skiprows参数替换为skiprows=lambda x: str(x).startswith('%'),自动跳过所有%开头的注释行 - 转换后的文件保留原始文件名前缀,仅替换后缀为.csv,方便对应原始数据
- 输出文件统一存放在指定目录,不会打乱原始.dat文件的存储结构
内容的提问来源于stack exchange,提问作者Beth
相关产品推荐
相关产品推荐

