Как очистить буфер stringIO в python

На самом деле я пытаюсь экспортировать 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() в приведенном выше коде?


person Shiva Krishna Bavandla    schedule 22.02.2013    source источник
comment
вы знаете, что в StringIO есть метод truncate(), как и для обычных файлов?   -  person isedev    schedule 22.02.2013
comment
да, но я пытался, и он не усекает строку буфера, поэтому подошел к SO, можете ли вы обратиться сюда stackoverflow.com/questions/15019549/ Это был мой фактический проблема   -  person Shiva Krishna Bavandla    schedule 22.02.2013
comment
@MartijnPieters -- не согласен: s = StringIO.StringIO(); s.write('привет, мир\n'); с.truncate (0); с.искать(0); s.read() -> возвращает пустую строку.   -  person isedev    schedule 22.02.2013
comment
Я также могу удалить свой ответ, потому что ваш диагноз того, что идет не так, неверен. Вы создаете новый экземпляр StringIO() каждый раз в download(), поэтому я думаю, что вы делаете что-то еще здесь неправильно.   -  person Martijn Pieters    schedule 22.02.2013
comment
@isedev: Ах, я забыл, что у .truncate() есть аргумент :-)   -  person Martijn Pieters    schedule 22.02.2013
comment
Чтобы было абсолютно ясно: создание нового StringIO объекта каждый раз означает, что он никогда не может содержать данные из предыдущего CSV-файла.   -  person Martijn Pieters    schedule 22.02.2013
comment
На самом деле в моем коде я объявил общую переменную web.some_vriable = [], которую я обновляю в каждом классе, здесь я перебираю этот список и сохраняю результаты в csv, вероятно, это результат для этого, после завершения генерации csv я должен очистить этот список, чтобы он содержал данные только из следующего URL-адреса в моем сценарии:) в настоящее время пытаюсь проверить это   -  person Shiva Krishna Bavandla    schedule 22.02.2013