gpt4 book ai didi

python - 自动递增文件名Python

转载 作者:行者123 更新时间:2023-11-28 21:51:42 24 4
gpt4 key购买 nike

我正在尝试编写一个函数,将路径名和文件名分配给一个变量,该变量基于文件夹中存在的文件名。然后,如果文件名已经存在,文件名将自动递增。我看过一些关于使用 while 循环的帖子,但我无法理解这个问题,想将其包装在递归函数中。

这是我目前所拥有的。当使用 print 语句进行测试时,每个都运行良好。但它不会将新名称返回给主程序。

def checkfile(ii, new_name,old_name):

if not os.path.exists(new_name):
return new_name

if os.path.exists(new_name):
ii+=1
new_name = os.path.join(os.path.split(old_name)[0],str(ii) + 'snap_'+ os.path.split(old_name)[1])
print new_name

old_name = “D:\Bar\foo”
new_name= os.path.join(os.path.split(old_name)[0],”output_” + os.path.split(old_name)[1])
checkfile(0,new_name,old_name)

最佳答案

虽然我不建议为此使用递归(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)

应该改为:

new_name= os.path.join(os.path.split(old_name)[0],”output_” + os.path.split(old_name)[1])
return checkfile(ii,new_name,old_name)

但实际上,您可以通过将其重写为:

 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,这可能非常昂贵,尤其是在路径是网络位置的情况下。

关于python - 自动递增文件名Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29682971/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com