我有一个项目正在使用 Scraperwiki 写入他们的 sqlite 商店,但我只需要编写一个CSV。问题是所有数据都存储在一个字典中,它可以很好地写入 sqlite:
scraperwiki.sqlite.save(unique_keys = ['somekey'], data = data, table_name='fancy')
我在刮完每一行后运行它。字典没有顺序,所以我不能只将值写入 CSV。我一直在查看csv.DictWriter和collections.defaultdict,但我仍然在思考如何重构我的代码以便我可以写入数据,而数据是 CSV 的字典。这是我现在结构化的代码示例:
def store_exception(exception, line_number, some_string):
data = {
'timestamp' : datetime.now(),
'line_number': line_number,
'message' : exception,
'string' : some_string
}
scraperwiki.sqlite.save(unique_keys = ['timestamp'], data = data, table_name='error_log')
我想我想要这样的东西:
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)
不过,这似乎效率低下。我需要 collections.defaultdict 和 csv.DictWriter 吗?