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

Passing an open file from one function to another

我是 python 初学者,请多多包涵。我在 GUI 上编写了一些代码,允许用户使用一个按钮 (browse_inputfile) select 一个文件,然后显示文件路径,然后用户可以单击另一个按钮 运行该文件的转换 (run_conversion).

然而,要做到这一点,我必须定义一个全局变量,使打开的文件能够从一个函数传递到另一个函数。有一个更好的方法吗?我尝试传递路径并在第二个函数中实际打开它,但这产生了 "file not found" 错误,我认为这是由于字符串路径中使用的“\”造成的。

这是我的代码:

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()

我知道使用全局变量不是好习惯,所以我怎样才能将打开的文件从一个函数传递到另一个函数并让用户在 "stuff" 为 [=36] 之前单击第二个按钮=] 在文件上?

我希望他们能够在对文件执行 "stuff" 之前检查文件是否正确。

谢谢

您当前的方法存在 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

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

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()