将列表保存到CSV-python

将列表保存到CSV-python,csv,python-3.x,tkinter,Csv,Python 3.x,Tkinter,我尝试使用“导入csv”将我的输出保存为csv,但只得到错误。有什么原因吗 既然我不能让它运行,它还会通知文件是否已经存在吗 非常感谢 from tkinter import * from tkinter.filedialog import asksaveasfilename from tkinter import ttk import csv def data(): ... output= <class 'list'> #just an example ...

我尝试使用“导入csv”将我的输出保存为csv,但只得到错误。有什么原因吗

既然我不能让它运行,它还会通知文件是否已经存在吗

非常感谢

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()
从tkinter导入*
从tkinter.filedialog导入asksaveasfilename
从tkinter导入ttk
导入csv
def data():
...
输出=#只是一个例子
...    
def savefile():
name=asksaveasfilename()
create=csv.writer(打开(名称,“wb”))
create.writerow(输出)
对于输出中的x:
create.writerow(x)
root=Tk()
Mframe=ttk.Frame(根)
网格(列=0,行=0,粘性=(N,W,E,S))
bSave=ttk.Button(Mframe,text='Save File',command=savefile)
bSave.grid(列=1,行=0)
root.mainloop()

您正在打开文件,但没有关闭它。一个好的做法是使用语句,确保关闭它。顺便说一句,我不知道
输出
列表是怎样的,但是如果它不是列表列表,那么调用
writerow
一次对我来说更有意义

此外,请确保此列表也是一个全局变量,否则它将在
savefile
的范围内不可用。但是,全局变量不是一个很好的解决方案,所以考虑把它作为一个参数传递给<代码> SaveFele,或者使用一个类来保存所有这些数据:

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

“…只会出错”。错误是什么?错误:“TypeError:'str'不支持缓冲区接口”谢谢。我将其更改为您建议的函数,并得到以下错误“TypeError:'str'不支持缓冲区接口”。您能解释一下原因吗?@user2613527在Python 3中,二进制模式无法写入csv文件。根据,您应该使用
open(name'w',newline='')
(我已经更新了答案)。非常感谢。这几乎是完美的。列表中的str写在一行中,但在不同的单元格中,而不是逐行。我不知道为什么?。文件未使用CSV扩展名保存,如何使用name=name+'.CSV'添加。如果需要覆盖文件,CSV将导致问题无法正常工作。已解决问题(NL表示新行):name=asksaveasfilename()NL output_file=open(name,'w',newline='')NL data=CSV.writer(output_file)NL for output中的行:NL data.writerow([row])NL输出_文件。关闭()