在方法中访问局部变量?

时间:2012-03-17 21:19:36

标签: python

我的脚本打开一个文件(a.txt)并将其复制到新文件(b.txt)。如果新文件存在,则索引名称(b1.txt),因此我不会覆盖现有文件。现在我想在函数外面使用复制文件(b#.txt)的最新名称(方法? - 对不起,我是新手)。

这是我脚本的一部分。我想在复制原始文件后调用replaceAll方法替换某些文本时使用newFile的当前值。


class classMain:

    def copyFile(self,origFile,newFile):
        fIn = open(origFile,'r')
        i = 0
        while os.path.exists(newFile):
            i += 1
        newFile = 'b'+str(i)+'.txt'
        fOut = open(newFile,'w')

        for line in fIn:
            fOut.writelines(line)

        fIn.close()
        fOut.close()

    def replaceAll(self,file,searchExp,replaceExp):
        for line in self.fIn(file, inplace=1):
            if searchExp in line:
                line = line.replace(searchExp,replaceExp)
            sys.stdout.write(line)

谢谢!

3 个答案:

答案 0 :(得分:1)

您可以:1)使用全局变量来存储newFile变量的最终值。 2)返回newFile变量的值,然后将其作为参数传递给replaceAll函数

答案 1 :(得分:1)

你提到这是class classMain。虽然这不是问题的最佳encapsulation,但您可以通过将变量写回成员变量来共享变量newFile,如下所示:

class classMain:

    newFile = None
    # ... the rest of your code here.

然后,您可以通过写入成员变量来引用它,并在类方法中将其作为self.newFile读取。但是,正如Kaustubh mentioned,还有其他方法可以解决这个问题。 This documentation也可以帮助您。

欢迎使用StackOverflow!祝你好运。

答案 2 :(得分:0)

由于您无法知道该函数将创建哪个文件,请通过返回值告诉您:

return newFile

return将立即结束其所在功能的执行,因此请相应地放置它。在您的情况下,它应该是copyFile()的最后一行。使用copyFile()时,通过将其赋值给变量来捕获它返回的值:

savedin = classMain.copyFile(oldname, newname)

如果您不想保存返回的值,只需像以前一样调用copyFile,然后丢弃返回的值。

其他一些答案建议设置一个全局变量。这可能是出于某种原因,但它是一种“副作用”,因为它在调用函数的代码中不可见。保持简单并返回值,直到遇到无法以这种方式解决的问题。