実際、いくつかのデータを含むcsvファイルをエクスポートしようとしていますが、以下は私のコードです
import csv
from cStringIO import StringIO
import web
def download(list__of_records):
csv_file = StringIO()
csv_writer = csv.writer(csv_file)
csv_writer.writerow(['Name', 'Link'])
for i in list_of_records :
csv_writer.writerow([i[0],i[1]])
web.header('Content-Type','text/csv')
web.header('Content-disposition', 'attachment; filename=%s.csv'%file_name)
return csv_file.getvalue()
list_of_records_1 = [('name',"fedrik"),('age','73'),('city','portland')]
list_of_records_2 = [('name',"wow"),('age','466'),('city','asdsa')]
download(list_of_records_1)
実際には、データを含む csv をダウンロードする Web ページで上記のコードを使用しlist_of_records
ます。
上記のコードでは、web.py フレームワークに過ぎない web を使用しています。ブラウザーに csv ifle をダウンロードするように指示するために使用しています。
私が関数download(list_of_records_1)
を呼び出したと仮定すると、以下のようにcsvファイルがデータとともにダウンロードされます
Name fedrik
age 73
city portland
で同じ関数を呼び出すと仮定するとdownload(list_of_records_2)
、csv に保存される出力は次のようになります。
Name fedrik
age 73
city portland
Name wow
age 466
city asd
つまり、データが csv で既に一致している場合は上書きされ、新しいデータが検出された場合は、csv ファイルが以前のデータと現在のlist_of_records_2
データで作成されます。
したがって、上記のコードでは、結果をバッファー文字列StringIO()
に保存して csv ファイルに保存した後、バッファー文字列データを切り捨て/削除する必要があります。これにより、他の結果リストで同じ関数を呼び出したときに、以前のデータが書き込まれません。現在のcsvファイルに
StringIO()
上記のコードでバッファ文字列を切り捨てる方法を教えてください。