Python如何批量处理文件夹内所有txt文件并原地保存修改结果
Python文本处理脚本批量改造方案
核心改造点
- 移除原代码硬编码的单文件输入输出路径,通过标准库
os遍历指定文件夹下所有.txt格式的文本文件 - 完全保留原处理逻辑:对每个文件的指定行按分号分割,将第25位元素移动到第7位位置,原第25位位置置空
- 处理结果直接覆盖保存到原文件,不再输出到独立的新文件
- 增加基础合法性校验,避免文件行数不足、字段数不足导致的运行报错
注意:Python序列索引从0开始计数,原代码中index=1对应文件的第2行,line[24]对应分号分割后的第25个元素,line[6]对应第7个元素,改造代码完全对齐该逻辑
改造后完整代码
import os # -------------------------- 可根据实际需求修改配置 -------------------------- TARGET_FOLDER = "./your_txt_dir" # 替换为待处理txt文件所在的文件夹路径 PROCESS_LINE_INDEX = 1 # 待处理的行索引,默认1对应文件第2行 SOURCE_COL_INDEX = 24 # 待移动元素的索引,默认24对应第25位 TARGET_COL_INDEX = 6 # 元素移动目标位置索引,默认6对应第7位 FILE_ENCODING = "utf-8" # 文件编码,若为gbk编码可修改为"gbk" # -------------------------------------------------------------------------- def process_single_txt(file_path: str): # 读取原文件所有行 with open(file_path, "r", encoding=FILE_ENCODING) as f: lines = f.readlines() # 校验文件行数是否满足处理要求 if len(lines) <= PROCESS_LINE_INDEX: print(f"[跳过] {file_path}:文件行数不足,不存在待处理行") return # 分割待处理行 deal_line = lines[PROCESS_LINE_INDEX].rstrip("\n\r") col_list = deal_line.split(";") # 校验字段数是否满足处理要求 if len(col_list) <= SOURCE_COL_INDEX: print(f"[跳过] {file_path}:待处理行分号分割后字段数不足25个") return # 执行元素移动逻辑 move_value = col_list[SOURCE_COL_INDEX] col_list[TARGET_COL_INDEX] = move_value col_list[SOURCE_COL_INDEX] = "" # 将修改后的行替换回内容列表 lines[PROCESS_LINE_INDEX] = ";".join(col_list) + "\n" # 覆盖写入原文件 with open(file_path, "w", encoding=FILE_ENCODING) as f: f.writelines(lines) print(f"[完成] {file_path}") if __name__ == "__main__": # 遍历目标文件夹下所有条目 for entry_name in os.listdir(TARGET_FOLDER): # 拼接完整路径 entry_full_path = os.path.join(TARGET_FOLDER, entry_name) # 仅处理后缀为.txt的文件,跳过子文件夹 if os.path.isfile(entry_full_path) and entry_name.lower().endswith(".txt"): process_single_txt(entry_full_path)
使用注意事项
- 运行前先将
TARGET_FOLDER配置项替换为实际存放待处理txt文件的文件夹路径,Windows系统路径写法示例:"D:/document/txt_files" - 若待处理txt文件为GBK/GB2312编码,将
FILE_ENCODING配置项修改为对应编码即可避免乱码 - 首次运行建议先备份原文件夹内的文件,避免误操作导致内容丢失
- 若需要调整处理的行号、移动的字段位置,直接修改顶部配置项对应的值即可,无需改动核心逻辑
内容的提问来源于stack exchange,提问作者6rs
相关产品推荐
相关产品推荐

