Python循环实现批量dat文件数值相减:A.dat值从B系列文件减去后存为sub后缀文件
批量文件数值减法实现方案
你之前的代码存在几个可优化/修正的点:
- 没有导入pandas库就调用了
pd.read_csv方法 - 缺少读取A文件数值、执行减法运算的核心逻辑
- 文件遍历规则不完善,没有筛选符合要求的B系列文件
os.rename参数写法错误,且不需要修改原文件,直接生成新的结果文件即可
首先确保你已经安装了pandas依赖:pip install pandas
以下是完整可运行的实现代码:
import os import pandas as pd # 请替换为你实际的文件存储目录路径 file_directory = "你的文件存放路径" # 读取A.dat的数值(A仅1行数据,直接取第一行的值即可) df_a = pd.read_csv( os.path.join(file_directory, "A.dat"), delimiter="\t", header=0 ) a_row = df_a.iloc[0] # 自动遍历目录下所有符合规则的B系列文件 for file_name in os.listdir(file_directory): # 筛选B开头、.dat结尾、未带sub标识的原始文件,避免重复处理 if file_name.startswith("B") and file_name.endswith(".dat") and "sub" not in file_name: # 读取当前B文件 df_b = pd.read_csv( os.path.join(file_directory, file_name), delimiter="\t", header=0 ) # 执行减法运算:B文件每一行对应列减去A文件的数值 df_result = df_b - a_row # 生成新文件名,例如B0.dat → B0sub.dat new_file_name = file_name.replace(".dat", "sub.dat") # 保存结果文件,保留原制表符分隔格式,不输出索引列 df_result.to_csv( os.path.join(file_directory, new_file_name), sep="\t", index=False )
额外说明
- 如果你的文件中小数用逗号分隔,只需要在
pd.read_csv的参数中添加decimal=","即可 - 代码会自动识别所有符合命名规则的B文件,支持任意数量的批量处理,不需要手动调整循环次数
- 运算会自动按列名对齐,列顺序调整也不会出现计算错误
内容的提问来源于stack exchange,提问作者UglyBetty
相关产品推荐
相关产品推荐

