将打开的文件从一个函数传递到另一个函数

时间:2015-11-27 10:54:28

标签: python function file file-handling

我是一个蟒蛇初学者所以请耐心等待。我在GUI上编写了一些代码,允许用户使用一个按钮(browse_inputfile)选择文件,然后显示文件路径,然后用户可以单击另一个按钮在该文件上运行转换(run_conversion)。

但是要做到这一点,我必须定义一个全局变量,以便将打开的文件从一个函数传递到另一个函数。有一个更好的方法吗?我尝试传递路径,并在第二个函数中实际打开它,但这产生了#34;文件未找到"错误我认为由于" \"用于字符串路径。

这是我的代码:

def browse_inputfile(self):
       global inputfile
       inputfile = open(QtGui.QFileDialog.getOpenFileName(self, "Open Data File", "", "txt files (*.txt)"),'r+')`

然后有一些代码使用" inputfile.name"来显示路径。

第二个功能是这样的:

def run_conversion(self):
   global inputfile     
   if inputfile: # if user didn't pick a file don't continue
      #do stuff
      inputfile.close()

我知道使用全局变量并不是一个好习惯,所以如何将打开的文件从一个函数传递到另一个函数并让它在用户点击之前点击第二个按钮"在文件上运行?

我希望他们能够在执行"之前检查正确的文件"在上面。

由于

2 个答案:

答案 0 :(得分:0)

您当前的方法在退出时不会关闭inputfile。我会做这样的事情:

file_path = None

def browse_inputfile(self):
       return QtGui.QFileDialog.getOpenFileName(self, 'Openfile', '/home')

def run_conversion(self, path):    
   if path: # if user didn't pick a file don't continue
      with open(path) as f:
          #do stuff

如果要强健地操作文件名,请使用os.path模块https://docs.python.org/2/library/os.path.html中的函数。

答案 1 :(得分:0)

使用inputfile作为类的字段,这样就不需要将文件作为参数传递或使用全局。

class MyClass:
    def browse_inputfile(self):
        self.inputfile = open(QtGui.QFileDialog.getOpenFileName(self, "Open Data File", "", "txt files (*.txt)"),'r+')`
        # you code for display the path


    def run_conversion(self):
        if self.inputfile: # if user didn't pick a file don't continue
            #do stuff
            self.inputfile.close()