1

実際、いくつかのデータを含む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()上記のコードでバッファ文字列を切り捨てる方法を教えてください。

4

0 に答える 0