我有一个包含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中有一些模块,我不知道这涉及到这种类型的过程。如果有人能指出我正确的方向,我会非常感激。
谢谢
答案 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))
该文件只读一次