2013-07-24 2 views
0

Я пытаюсь сохранить свой вывод как csv, используя «import csv» и получить только ошибки. Почему?сохранить список в CSV - python

Поскольку я не могу запустить его, он также уведомит, существует ли файл уже существует?

Большое спасибо

from tkinter import * 
from tkinter.filedialog import asksaveasfilename 
from tkinter import ttk 

import csv 

def data(): 
    ... 
    output= <class 'list'> #just an example 
    ...  

def savefile(): 
    name= asksaveasfilename() 
    create = csv.writer(open(name, "wb")) 
    create.writerow(output) 
    for x in output: 
     create.writerow(x) 

root = Tk() 
Mframe = ttk.Frame(root) 
Mframe.grid(column=0, row=0, sticky=(N, W, E, S)) 

bSave=ttk.Button(Mframe, text='Save File', command=savefile) 
bSave.grid(column=1, row=0) 

root.mainloop() 
+0

«... только получить ошибки». Каковы ошибки? –

+0

Ошибка: «TypeError:« str »не поддерживает интерфейс буфера» – hsi

ответ

0

Вы открываете файл, но не закрывая его. Хорошей практикой является использование оператора with, чтобы убедиться, что вы его закрыли. Кстати, я не знаю, как выглядит список output, но если он не является списком списков, мне больше нужно позвонить writerow один раз.

Кроме того, убедитесь, что этот список также является глобальной переменной, иначе он не будет доступен в пределах savefile. Однако, глобальные переменные не очень хорошее решение, так считают передать его в качестве аргумента savefile или использовать класс держать все эти данные:

def savefile(): 
    name = asksaveasfilename() 
    with open(name, 'w', newline='') as csvfile: 
     create = csv.writer(csvfile) 
     create.writerow(output) 
+0

Спасибо. Я изменил его на вашу предложенную функцию, и я получаю эту ошибку: «TypeError:« str »не поддерживает буферный интерфейс». Не могли бы вы объяснить, почему? – hsi

+0

@ user2613527 В Python 3 двоичный режим не работает для записи csv-файлов. Согласно [документации] (http://docs.python.org/3/library/csv.html#id2), вы должны использовать 'open (name, 'w', newline = '')' (я обновил ответ). –

+0

Большое спасибо. это почти идеально. str в списке записываются в одну строку, но в разных ячейках, а не в строке за строкой. Я не могу понять, почему ?. Файлы не сохраняются с расширением CSV, как его можно добавить с помощью name = name + '. Csv' вызовет у меня проблемы, не получится, если мне нужно перезаписать файл. – hsi

Смежные вопросы