Python读取CSV文件按账号分组并为每个账号生成单独CSV文件
解决Python按账号拆分CSV文件的方案
实现思路
- 用Python内置
csv模块处理CSV文件,无需安装第三方依赖 - 先读取原文件表头,每个拆分后的子文件都保留相同表头
- 用字典缓存已创建的账号文件对象,避免重复打开关闭文件、重复写入表头
- 遍历每一行数据,按
Account字段值分发到对应文件
完整可运行代码
import csv # 配置参数,替换为你自己的文件路径 ORIGIN_FILE = "test.csv" # 输出文件命名规则,{account}会自动替换为实际账号值 OUTPUT_FILE_PATTERN = "account_{account}.csv" # 缓存已打开的文件对象和csv写入器 file_handles = {} csv_writers = {} try: with open(ORIGIN_FILE, 'r', newline='', encoding='utf-8') as origin_f: # 读取CSV内容,根据你的文件分隔符调整参数: # 逗号分隔不用加delimiter参数 # 制表符分隔加 delimiter='\t' # 多空格分隔加 delimiter=' ', skipinitialspace=True reader = csv.DictReader(origin_f, delimiter=' ', skipinitialspace=True) # 遍历每一行数据 for row in reader: account = row['Account'].strip() # 账号没有对应文件时,创建新文件并写入表头 if account not in csv_writers: f = open(OUTPUT_FILE_PATTERN.format(account=account), 'w', newline='', encoding='utf-8') file_handles[account] = f writer = csv.DictWriter(f, fieldnames=reader.fieldnames) writer.writeheader() csv_writers[account] = writer # 写入当前行到对应账号文件 csv_writers[account].writerow(row) finally: # 统一关闭所有打开的子文件 for f in file_handles.values(): f.close()
常见调整说明
- 编码报错时,把代码里的
encoding='utf-8'替换为encoding='gbk'即可适配Windows系统导出的CSV文件 - 输出文件名可以自定义修改
OUTPUT_FILE_PATTERN,比如改成"{account}_用户明细.csv"都可以 - 运行完成后所有拆分后的文件会生成在脚本运行的同级目录下,每个文件仅包含对应账号的全部行数据,保留原表头格式
内容的提问来源于stack exchange,提问作者winterlyrock
相关产品推荐
相关产品推荐

