虽然我不建议对此使用递归(python的堆栈最大深度约为1000个函数调用深度),但您只是缺少递归位的返回:new_name= os.path.join(os.path.split(old_name)[0],”output_” + os.path.split(old_name)[1])
checkfile(0,new_name,old_name)
应改为:
^{pr2}$
但实际上,你可以把它改写成:def checkfile(path):
path = os.path.expanduser(path)
if not os.path.exists(path):
return path
root, ext = os.path.splitext(os.path.expanduser(path))
dir = os.path.dirname(root)
fname = os.path.basename(root)
candidate = fname+ext
index = 0
ls = set(os.listdir(dir))
while candidate in ls:
candidate = "{}_{}{}".format(fname,index,ext)
index += 1
return os.path.join(dir,candidate)
这个表单还处理了一个事实,即文件名有扩展名,而原始代码没有,至少不是很清楚。它还避免了不必要的os.path.exist,这可能是非常昂贵的,特别是如果路径是一个网络位置。在