[英]Scraping a table into a dict and writing each row to CSV
我有一個使用Scraperwiki寫入其sqlite商店的項目,但是我只需要編寫CSV即可 。 問題在於,所有數據都存儲在dict中,這對於寫入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?
這應該做。 您根本不需要default_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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.