如何用Python内置库按列唯一值生成多个文件
使用Python内置库按列唯一值拆分CSV文件
完全可以用Python内置的csv模块实现这个需求,不需要依赖pandas。下面直接讲实现逻辑和代码:
核心实现步骤
- 读取原始CSV文件,用指定分隔符解析每行数据
- 按
uniquevalue列的唯一值对数据分组,把相同值的行归类 - 遍历每个分组,以唯一值为文件名,写入表头和对应行数据
完整代码示例
假设你的原始数据保存在input.csv文件中,代码如下:
import csv # 配置参数 input_file = "input.csv" delimiter = "|" # 你的CSV用|分隔,若为逗号则改成"," # 第一步:读取数据并按uniquevalue分组 data_groups = {} header = None with open(input_file, mode='r', newline='', encoding='utf-8') as f: # 用DictReader可以通过列名直接取值,不用记索引 reader = csv.DictReader(f, delimiter=delimiter) header = reader.fieldnames # 保存表头 for row in reader: # 取出当前行的uniquevalue值作为分组键 group_key = row['uniquevalue'] # 若分组不存在则初始化空列表 if group_key not in data_groups: data_groups[group_key] = [] # 将当前行加入对应分组 data_groups[group_key].append(row) # 第二步:遍历分组,写入对应文件 for group_key, rows in data_groups.items(): output_filename = f"{group_key}.csv" with open(output_filename, mode='w', newline='', encoding='utf-8') as f: # 用DictWriter按表头顺序写入数据 writer = csv.DictWriter(f, fieldnames=header, delimiter=delimiter) writer.writeheader() # 先写入表头 writer.writerows(rows) # 写入当前分组的所有行
关键细节说明
csv.DictReader/csv.DictWriter:这两个类把每行数据转成字典,通过列名操作数据,比用索引更直观,也能保证输出的列顺序和原文件一致data_groups字典:用来临时存储分组数据,键是uniquevalue的唯一值,值是对应行的列表newline='':避免在Windows系统下写入文件时出现多余的空行,保证跨平台兼容性- 重复行处理:代码会保留原文件中的重复行,和你给出的示例输出一致
额外注意事项
- 如果
uniquevalue包含特殊字符(比如/、\、:等),这些字符在文件名中是非法的,需要提前处理(比如替换成下划线) - 确保输入文件路径正确,若文件和脚本在同一目录下,直接写文件名即可
内容的提问来源于stack exchange,提问作者BigFerry
相关产品推荐
相关产品推荐

