На самом деле я пытаюсь экспортировать 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-файл с данными list_of_records
.
В приведенном выше коде я использую сеть, которая представляет собой не что иное, как структуру web.py, которую я использую, чтобы указать браузеру загрузить CSV-файл.
предположим, я вызвал функцию 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()
в приведенном выше коде?
StringIO()
каждый раз вdownload()
, поэтому я думаю, что вы делаете что-то еще здесь неправильно. - person Martijn Pieters   schedule 22.02.2013.truncate()
есть аргумент :-) - person Martijn Pieters   schedule 22.02.2013StringIO
объекта каждый раз означает, что он никогда не может содержать данные из предыдущего CSV-файла. - person Martijn Pieters   schedule 22.02.2013