Python新手求助:按Lieferung列拆分CSV文件至多个文件
按指定列分组生成多个CSV文件的Python实现
方法一:使用Python标准库csv(无需额外安装依赖)
适合不想安装第三方库的新手,完全依赖Python自带模块:
import csv from collections import defaultdict input_file = 'main.csv' # 用defaultdict自动存储每个Lieferung对应的行数据 groups = defaultdict(list) with open(input_file, mode='r', encoding='utf-8') as f: reader = csv.DictReader(f, delimiter=';') header = reader.fieldnames # 遍历每行数据,按Lieferung值分组 for row in reader: lieferung_val = row['Lieferung'] groups[lieferung_val].append(row) # 为每个分组生成独立CSV文件 for lieferung, rows in groups.items(): output_file = f"{lieferung}.csv" with open(output_file, mode='w', encoding='utf-8', newline='') as f: writer = csv.DictWriter(f, fieldnames=header, delimiter=';') writer.writeheader() writer.writerows(rows)
关键说明:
csv.DictReader按字典格式读取数据,直接通过列名Lieferung取值defaultdict自动为新的Lieferung值创建空列表,省去手动判断键是否存在的步骤- 严格使用
;作为分隔符,和输入文件格式匹配,保留原表头结构
方法二:使用pandas(代码更简洁)
如果愿意安装第三方库,pandas能大幅简化代码:
- 先安装pandas:
pip install pandas
- 实现代码:
import pandas as pd # 读取输入文件,指定分隔符为; df = pd.read_csv('main.csv', sep=';') # 按Lieferung列分组,逐个保存为CSV for lieferung, group in df.groupby('Lieferung'): group.to_csv(f"{lieferung}.csv", sep=';', index=False, encoding='utf-8')
关键说明:
groupby('Lieferung')一键完成分组操作to_csv保存时通过index=False避免写入多余的索引列,保证输出文件结构和原文件一致
两种方法都能满足需求,新手可先尝试第一种理解底层逻辑;追求效率和简洁的话,第二种方法更合适。
内容的提问来源于stack exchange,提问作者Felix
相关产品推荐
相关产品推荐

