簡體   English   中英

將表格刮成字典並將每一行寫入CSV

[英]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.DictWritercollections.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM