2016-09-28 108 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()向他们提供该工具。

相关问题