Python - 将数据添加到现有CSV文件?

时间:2016-09-28 13:04:51

标签: python csv

我正在使用Python 2.7并运行常规抓取任务。我想使用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')

有更好的方法吗?具体来说,我可以将任何新数据直接添加到现有文件中,而无需创建和删除文件,并且安全地使得如果网络中断,我不会丢失一半的文件吗?

我知道追加模式,但我正在编辑现有行,而不只是添加新行。

谢谢!

1 个答案:

答案 0 :(得分:0)

如果您希望您的解决方案仍然基于文件(显然使用MySQL等纯数据库解决方案会更好),请考虑使用SQLite。 SQLite数据库可以存储为磁盘上的文件,只能传递,但您可以在其上使用大多数数据库函数。 (这些函数将允许您执行"检查数据是否已经在CSV"位。)然后,您可以在SQLite数据库中插入值,而无需创建任何新文件。

现在,如果有一些最终用户想要将数据作为.csv,那么请创建一个使用pd.read_sql()然后df.to_csv()的实用程序来为他们提供数据。