根据具有相同项目的列表创建和写入文件

时间:2011-12-10 18:53:39

标签: python

我有一个包含237行交易的CSV文件,我已经想出要按照正确的顺序对帐户编号排序的事务进行分组,排序和创建新的CSV文件。不过,我想更进一步,根据账号和所有账号的交易创建多个CSV文件。

我认为我想要做的只是根据帐号将每行添加到适当的CSV文件中,但我想动态地执行此操作,因此我不必创建每个变量,因为总是存在未知数量的帐号。

Account #, Date, Dollar Amount (stored as heading)
001, 1/1/11, $25
001, 1/1/11, $20
002, 1/1/11, $15
003, 1/4/11, $19

因此,根据这些数据,我想根据帐号创建三个单独的CSV文件。我不是在寻找编写代码的人,但我希望Python中有一些模块,我不知道这涉及到这种类型的过程。如果有人能指出我正确的方向,我会非常感激。

谢谢

3 个答案:

答案 0 :(得分:1)

我认为没有这样的模块。我会为每个帐户操作创建单独的列表,并将它们放在密钥是帐号的字典中。然后在迭代整个输入文件后,您可以将每个列表保存为单独的.csv文件。

如果您的输入文件已经排序,那么您只需将行复制到输出文件,然后当帐户更改关闭输出文件并打开新帐户的下一个输出文件时。

答案 1 :(得分:1)

这是一种快速(可能不那么有效)的解决方案。

from sets import Set
import csv

source = list(csv.reader(open("account_file.csv")))

accounts = Set(line[0] for line in source)

for account in accounts:
    out = open(account+".csv","w")
    out.write( "\n".join(",".join(x) for x in source if x[0] == account))
    out.close()

答案 2 :(得分:0)

不需要CSV接口,我更喜欢这个:

from collections import defaultdict
from os.path import getsize

with open('accounts.csv') as f:

    first_line = f.readline()

    d = defaultdict(list)
    for line in f:
        d[line.split(',')[0]].append(line)

    for account,lines in d.iteritems():
        with open(account+'.csv','a') as f:
            if getsize(account+'.csv')==0:
                f.write(first_line)
            f.write(''.join(lines))

该文件只读一次