2016-09-28 74 views
0

我正在使用Python 2.7並運行常規的抓取任務。我想使用CSV在刮擦之間存儲數據。Python - 將數據添加到現有的CSV文件?

目前我正在從一個CSV文件中讀取數據,寫出來一行接一行到另一個,然後刪除和重命名文件:

reader = pd.read_csv('temp1.csv') 
reader.set_index('id', inplace=True) 
writer = csv.DictWriter(open('temp2.csv', 'wb'), fieldnames=['id', 'links']) 
writer.writeheader() 
for i, row in reader.iterrows(): 
    # Check if data is already in CSV, if not scrape it. 
    try: 
     links = df_links.ix[row['id']]['links'] 
    except KeyError: 
     links = do_scrape(row['id']) 
    if links: 
     df.set_value(i, 'pubmed_links', links) 
    # Write data out to new CSV file. 
    writer.writerow({'id': row['id'], 'links': links}) 
os.remove('temp1.csv') 
os.rename('temp2.csv', 'temp1.csv') 

有沒有更好的辦法?具體而言,我可以直接將任何新數據添加到現有文件中,而無需創建和刪除文件,並且安全可靠,因此如果網絡中途中斷,我不會丟失一半文件?

我知道追加模式,但我正在編輯現有的行,而不只是添加新的行。

謝謝!

+0

沒有更好的方法。 –

+0

這是人們在20世紀80年代習慣做事的方式。現在我們使用RDBM。 – e4c5

回答

0

如果您希望您的解決方案仍然是基於文件的(顯然使用純數據庫解決方案(如MySQL)會更好),然後考慮使用SQLite。 SQLite數據庫可以作爲一個文件存儲在磁盤上,可以傳遞,但是你可以使用大部分的數據庫功能。 (這些函數將允許您執行「檢查數據是否已在CSV中」位)。然後,您可以在SQLite數據庫中插入值,而無需創建任何新文件。

現在,如果有一些最終用戶希望數據爲.csv,則可以使用一些實用工具,使用pd.read_sql(),然後使用df.to_csv()向他們提供該工具。