将一个表刮入dict并将每一行写入CSV

2024-04-19 00:55:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个项目使用Scraperwiki来写入他们的sqlite存储,但是我只需要写一个CSV。关键是所有数据都存储在dict中,这对于写入sqlite很好:

scraperwiki.sqlite.save(unique_keys = ['somekey'], data = data, table_name='fancy')

我把每一行都刮干净后再运行。dict没有顺序,所以我不能直接将值写入CSV。我一直在研究csv.DictWriter和{a3},我仍然在思考如何重构我的代码,以便我可以编写数据,这是一个字典到CSV。下面是我的代码的一个结构化示例:

^{2}$

我想我想要这样的东西:

def store_exception(exception, line_number, some_string):
    data = {
        'timestamp'  : datetime.now(),
        'line_number': line_number,
        'message'    : exception,
        'string'     : some_string
    }
    d = defaultdict(lambda: "")
    d_order = d['timestamp'],d['line_number'],d['message'],d['string']

    with open('some/path.csv', 'w') as csvfile:
        linewriter = csv.DictWriter(csvfile, d_order, delimiter='|',
                            quotechar='"', quoting=csv.QUOTE_MINIMAL)
        linewriter.writerow(data)

不过,这似乎效率低下。我两者都需要吗集合.defaultdict以及csv.DictWriter?在


Tags: csv数据代码numbermessagesqlitedatastring
1条回答
网友
1楼 · 发布于 2024-04-19 00:55:33

这应该行。您根本不需要默认的dict,d_order只需要是字段名的列表,或者在本例中是dict键:

def store_exception(exception, line_number, some_string):
    data = {
        'timestamp'  : datetime.now(),
        'line_number': line_number,
        'message'    : exception,
        'string'     : some_string
    }

    d_order = ['timestamp', 'line_number', 'message', 'string']

    with open('some/path.csv', 'w') as csvfile:
        linewriter = csv.DictWriter(csvfile, d_order, delimiter='|',
                            quotechar='"', quoting=csv.QUOTE_MINIMAL)
        linewriter.writerow(data)

相关问题 更多 >