将参数io的变量创建到pd.read_excel()

时间:2018-06-06 16:40:24

标签: python pandas dataframe tkinter

请参阅pandas.read_excel()

我正在创建一个Tkinter的GUI,它将自动化多个角色的最终得分。我对Tkinter也很新。在我的代码中,我正在阅读几个将创建到数据框中的Excel工作表,以便我对每个工作表进行适当的计算。我将要阅读的一张excel表是一张excel表,其中包含我的团队中的代码用户可以进入并编辑/添加新字符的字符列表(如果需要)。当他们运行代码时,将使用任何编辑/添加的字符更新分析。对于这个问题,我将以此为例,称之为filename

理想情况下,我想在Tkinter中创建一个浏览按钮,提示用户查找excel文件,然后将所选文件存储在变量filename中以备将来使用。我的代码稍后将嵌入pd.read_excel(),我希望filename成为将被读入的excel文件/ io参数。我只是想知道这是否可行。看看其他尝试并不一定能解决我想要的问题。

这也是我第一次使用Tkinter,但是这里有一个 草案 (强调草稿!)到目前为止我所拥有的:

import tkinter as tk
from tkinter import *

class Automation:
    def __init__(self, master):
        self.master = master
        master.title("Test")

        self.label = Label(master, text="Welcome to the Score Automation.\nPlease select the ALC File containing all updated names.")
        self.label.pack()

        self.browse_button_characterlist = Button(master, text="Select File", command=self.askopenfile)
        self.browse_button_characterlist.pack()

        self.close_button = Button(master, text="Close", command=master.quit)
        self.close_button.pack()

    def askopenfile(self):
        root = tk.Tk()
        root.withdraw()
        filename = askopenfilename()

        print(filename)

root = Tk()
my_gui = Automation(root)
root.mainloop()

然后将文件名作为参数存储到pandas.read_excel()

pd.read_excel(filename, usecols = "B", 
               skiprows = range(0,4), skip_footer = 2)

有关订购或我如何使用askopenfile()的任何建议也会很棒。提前谢谢。

1 个答案:

答案 0 :(得分:1)

你在这里缺少一些东西 - 一个对象是什么,一个模块是什么(以及如果我理解你的尝试,如何从中提取方法),以及self的使用。这甚至在tk进程之前就像根窗口一样。我建议一个教程,首先是Python,然后是tkinter。对于你的问题,请在顶部添加:

#Do not import *, import only what you need.
from tkinter.filedialog import askopenfilename

并更改您的事件处理程序(我强烈建议您将名称更改为程序中有意义的内容,即readExcel):

def askopenfile(self):
    #Force specific file types only. Use `self` to make the file name available from any method.
    self.filename = askopenfilename(filetypes=(('xsl','*.xsl'),('xslx','*.xslx')))
    self.excel = pd.read_excel(self.filename, usecols = "B", skiprows = range(0,4), skip_footer = 2)

注意我在Tk()中删除了您拥有Tkself.master对象的两条filename行。不要做两个,因为它不稳定和资源沉重,加上没有理由两个(你已经有一个gui app,为什么要做两个?)。

您可能希望向处理程序添加check / try除块。现在excelself.成员都可以通过Automation在{{1}}对象中的任何其他方法中使用。