2016-09-28 21 views
0

私はPython 2.7を使用していて、通常のスクレイピングタスクを実行しています。私は擦り傷の間にデータを保存するためにCSVを使用したいと思います。Python - 既存のCSVファイルにデータを追加しますか?

は現在、私は、1つの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

これは人々が1980年代に物事をするのに使った方法です。今はRDBMを使用しています。 – e4c5

答えて

0

あなたのソリューションを依然としてファイルベースにしたい場合(明らかに、MySQLなどの純粋なデータベースソリューションを使用する方が良いでしょう)、SQLiteを使用することを検討してください。 SQLiteデータベースは、単に渡すことができるディスク上のファイルとして保存できますが、ほとんどのデータベース機能を使用できます。 (これらの機能を使用すると、「データがすでにCSVであるかどうかを確認する」ビットを実行できます)。新しいファイルを作成せずにSQLiteデータベースに値を挿入できます。

データを.csvとして欲しいエンドユーザーがいる場合は、pd.read_sql()を使用し、次にdf.to_csv()を使用するユーティリティを作成してください。

関連する問題