我的脚本打开一个文件(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)
谢谢!
答案 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
,然后丢弃返回的值。
其他一些答案建议设置一个全局变量。这可能是出于某种原因,但它是一种“副作用”,因为它在调用函数的代码中不可见。保持简单并返回值,直到遇到无法以这种方式解决的问题。