如何使用先前定义的方法中的选定文件

时间:2016-11-02 14:51:50

标签: python python-3.x

我已经使用askopenfilename在类中定义了一个方法来选择文件:

def file(self):

    options = {
       'defaultextension': '.txt',
       'filetypes': [('text files', '.txt')]
  }

    filename = filedialog.askopenfilename(title='Choose a file', initialdir="/", **options)

    if filename:
      directory = os.path.split(filename)[-1]
      self.var.set(directory)

我想使用所选文件运行另一种方法来运行快速文本分析。我尝试使用:

text = file.filename

但这给了我错误“'function'对象没有属性'filename'”,即使它是在我的方法中定义的。我想,因为我在一个类中定义了两个东西,它能够识别方法文件()中定义的“filename”。为什么不认识到这一点?

1 个答案:

答案 0 :(得分:0)

看起来filename是方法文件()中的局部变量,并没有作为成员变量分配给对象本身?也许你应该改变你的定义:

filename = filedialog.askopenfilename(title='Choose a file', initialdir="/", **options)

 self.filename = filedialog.askopenfilename(title='Choose a file', initialdir="/", **options)

并对方法体的其余部分进行更改。

或者你只需​​在方法的末尾返回文件名。

这是一个简单的工作示例,我返回文件名(我摆脱了self.var.set部分,我也使用python2,所以我将filedialog更改为tkFileDialog):

import tkFileDialog
import os

class Test(object):

    def __init__(self):
        print('Initialized')

    def file(self):
        options = {
       'defaultextension': '.txt',
       'filetypes': [('text files', '.txt')]
        }

        filename = tkFileDialog.askopenfilename(title='Choose a file', initialdir="/", **options)

        if filename:
            directory = os.path.split(filename)[-1]
            return filename

newTest = Test()
filename = newTest.file()
print filename