我可以使用Tkinter文件对话框保存Pandas DataFrame吗?

时间:2019-06-11 18:09:32

标签: python sql pandas tkinter

我对编程非常陌生,甚至对Tkinter也不陌生。

我正在设置与SQL Server一起使用的GUI,以允许前端用户检索,更新和删除某些信息。

目前,我可以正常通信并正常工作,但是我有一个函数可以使用Pandas将结果列表导出到excel文件中。导出工作正常,但它具有静态名称和目录,我在Pandas的to_excel方法中提供了该目录。

我想使用Tkinter的asksaveasfilename对话框允许用户命名并选择文件导出位置,但是我似乎无法弄清楚此对话框的工作方式(如果可能的话)。对话框代码内是否有一个选项,我可以在其中指定要保存的信息?

def exportFunc():
      pd.DataFrame(data).to_excel("TestList.xlsx", header=False, index = True)
      filedialog.asksaveasfilename(initialdir = "/", title = 'Save File', filetypes = ("Excel File", "*.xlsx"))
      pass

我的代码不会产生任何错误,只是用我尝试的所有内容在对话框中什么也没有保存。现在,我在我的实际代码中注释了文件对话框,但是如果有人可以指导我寻求可能的解决方案,我将不胜感激!

2 个答案:

答案 0 :(得分:1)

这是10个月前发布的,但我希望这个答案也可以帮助其他新手也可以谷歌搜索。

我如何解决此问题的方法是注意到asksaveasfile函数输出的值包含用户指定的文件路径和文件名。例如:

<已关闭文件u'E:Filepath / AnotherPath / work2.xlsx',模式为'w',位于2119x6710>

然后我使用正则表达式和replace方法剥离文件路径周围的所有值,完成后,to_excel函数将被视为硬代码。

希望这可以帮助某个人!

out = tkFileDialog.asksaveasfile(mode='w', defaultextension=".xlsx")
out.close()


restr = str(out)

RegexPrep = restr.replace("'w'", '')

outRegex = re.findall(r"'(.*?)'", RegexPrep)
ToExcelRegex = str(outRegex)

MorePrep = ToExcelRegex.replace("[",'')
MorePrep = MorePrep.replace("]",'')
MorePrep = MorePrep.replace("'",'')
Final = MorePrep.strip()

find.to_excel(Final, index=False)

答案 1 :(得分:0)

Asksavasafile 返回一个文件对象,因此我们可以使用它来保存 df。

from tkinter import filedialog, Tk

import pandas as pd

df = pd.DataFrame(
{"Test": range(20)}
)

root = Tk()  # this is to close the dialogue box later
try:
    # with block automatically closes file
    with filedialog.asksaveasfile(mode='w', defaultextension=".xlsx") as file:
        df.to_excel(file.name)
except AttributeError:
    # if user cancels save, filedialog returns None rather than a file object, and the 'with' will raise an error
    print("The user cancelled save")
    
root.destroy() # close the dialogue box