首页 > 解决方案 > 根据列值从单个文件生成多个文件

问题描述

我刚刚开始学习 python,试图将它用于我使用 excel 过滤器操作符执行的一项手动活动。

每个月我都会收到一个文件,我将该 csv 放入 excel 中,然后应用过滤器为运营商字段中的值创建一个新文件,并与相应的运营商共享该文件。

这是我的 csv 中的一些示例数据。我在这里只展示了 2 个运营商,但我有超过 13 个值,

carrier,type,count
DTH,a,123
DTH,b,3123
DTH,c,41341
DTH,d,13411
BLUEDART,a,12123
BLUEDART,b,31231
BLUEDART,c,411
BLUEDART,d,11

预期产出

DTH.csv

carrier,type,count
DTH,a,123
DTH,b,3123
DTH,c,41341
DTH,d,13411

BLUEDART.csv

carrier,type,count
BLUEDART,a,12123
BLUEDART,b,31231
BLUEDART,c,411
BLUEDART,d,11

非常感谢任何帮助或只是指导。

标签: pythonpython-3.x

解决方案


仅使用 Python 的标准库:

import csv

def write_output(header_row, carrier_name, c_rows):
    print("writing output for "+carrier_name)
    with open("c:\\tmp\\"+carrier_name+".csv", "w", newline="") as outfile:
                outwriter = csv.writer(outfile, delimiter=",")
                outwriter.writerow(header_row)
                for outrow in c_rows:
                    outwriter.writerow(outrow)

with open("c:\\tmp\\carrier.csv", newline="") as csvfile:
    creader = csv.reader(csvfile, delimiter=",")

    first_row = True
    header_row = None
    groups = {}

    for row in creader:
        if first_row:
            header_row = row
            first_row = False
        else:
            if not row[0] in groups:
                groups[row[0]] = [row]
            else:
                groups[row[0]].append(row)

    for gr in groups:
        write_output(header_row, gr, groups[gr])

推荐阅读