【问题标题】:Can I save a Pandas DataFrame with a Tkinter File Dialog?我可以使用 Tkinter 文件对话框保存 Pandas DataFrame 吗?
【发布时间】:2019-06-11 18:09:32
【问题描述】:

我对编程还很陌生,对 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

我的代码没有产生任何错误,只是简单地在对话框中保存了我尝试的所有内容。现在我在我的实际代码中注释掉了文件对话框,但如果有人能指导我找到可能的解决方案,我将不胜感激!

【问题讨论】:

标签: python sql pandas tkinter


【解决方案1】:

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

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

然后我使用 regex 和 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)

【讨论】:

    【解决方案2】:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-11
      • 1970-01-01
      • 1970-01-01
      • 2016-11-25
      • 1970-01-01
      • 2013-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多