基于具有相似项的列表创建和写入文件

2024-04-25 04:22:05 发布

您现在位置: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中有一个我不知道的模块涉及这种类型的进程。如果有人能给我指出正确的方向,我将不胜感激。你知道吗

谢谢


Tags: 文件csvdate排序顺序动态帐户交易
3条回答

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

若您的输入文件已经排序,那个么您可以简单地将行复制到输出文件,然后当帐户更改时,关闭输出文件并为新帐户打开下一个输出文件。你知道吗

不需要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))

文件只读取一次

这是一个快速(可能效率不高)的解决方案。你知道吗

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()

相关问题 更多 >