如何用Python实现文本文件追加、格式化处理及多文件合并?
Python实现多文件合并:追加Summary字段到数据行
核心思路
- 逐个读取目标文件,拆分出数据区域(表头+数据行)和Summary区域(分隔线后的键值对)
- 提取Summary中
Heading6到Heading11的键值对,将这些键追加到原表头,对应值追加到每条数据行末尾 - 收集所有处理后的内容,合并为单个文件(仅保留一次表头)
实现代码
假设你的文件是**逗号分隔(CSV)**格式,分隔线为---,Summary键值对格式为HeadingX: 对应值,代码如下:
import os import csv def process_single_file(file_path): """处理单个文件,返回处理后的表头和数据行""" with open(file_path, 'r', encoding='utf-8') as f: lines = [line.strip() for line in f if line.strip()] # 拆分数据区域和Summary区域(按分隔线分割) split_idx = lines.index('---') data_lines = lines[:split_idx] summary_lines = lines[split_idx+1:] # 解析原表头和数据行 header = data_lines[0].split(',') data_rows = [row.split(',') for row in data_lines[1:]] # 提取Summary中Heading6到Heading11的键值对 summary_keys = [f'Heading{i}' for i in range(6, 12)] summary_dict = {} for line in summary_lines: key, value = line.split(':', 1) key = key.strip() if key in summary_keys: summary_dict[key] = value.strip() # 确保所有需要的Summary键都存在(缺失则补空) for key in summary_keys: if key not in summary_dict: summary_dict[key] = '' # 追加表头和数据行 new_header = header + summary_keys new_data_rows = [row + [summary_dict[key] for key in summary_keys] for row in data_rows] return new_header, new_data_rows def merge_all_files(input_dir, output_file): """合并指定目录下的所有目标文件""" all_files = [f for f in os.listdir(input_dir) if f.endswith('.txt') or f.endswith('.csv')] first_file = True with open(output_file, 'w', encoding='utf-8', newline='') as out_f: writer = csv.writer(out_f) for file_name in all_files: file_path = os.path.join(input_dir, file_name) try: header, data_rows = process_single_file(file_path) # 第一个文件写入表头,后续文件跳过表头 if first_file: writer.writerow(header) first_file = False # 写入数据行 writer.writerows(data_rows) print(f"处理完成:{file_name}") except Exception as e: print(f"处理失败 {file_name}: {str(e)}") # 示例调用 if __name__ == '__main__': input_directory = './your_input_files' # 替换为你的文件目录 output_path = './merged_result.csv' # 输出文件路径 merge_all_files(input_directory, output_path)
关键调整点
- 如果你的文件不是逗号分隔,修改
split(',')中的分隔符(比如制表符用\t) - 如果分隔线不是
---,替换lines.index('---')中的分隔符字符串 - 如果Summary的键值对格式不同(比如没有冒号),调整
line.split(':', 1)的解析逻辑 - 若文件编码不是UTF-8,修改
open函数的encoding参数(比如gbk)
内容的提问来源于stack exchange,提问作者Muhammad Waqas
相关产品推荐
相关产品推荐

