gpt4 book ai didi

python - 一种创建文件和目录而不覆盖的方法

转载 作者:太空狗 更新时间:2023-10-30 01:18:19 26 4
gpt4 key购买 nike

你知道当你下载一些东西并且下载文件夹包含一个同名文件时,文件不会覆盖它或抛出错误,而是在文件末尾附加一个数字吗?例如,如果我想下载my_file.txt,但它已经存在于目标文件夹中,新文件将被命名为my_file(2).txt。如果我再试一次,它将是 my_file(3).txt

我想知道 Python 3.x 中是否有一种方法可以检查并获得唯一的名称(不一定创建文件或目录)。我目前正在执行此操作:

import os
def new_name(name, newseparator='_')
#name can be either a file or directory name

base, extension = os.path.splitext(name)
i = 2
while os.path.exists(name):
name = base + newseparator + str(i) + extension
i += 1

return name

在上面的示例中,如果 my_file.txt 已经存在,则运行 new_file('my_file.txt') 将返回 my_file_2.txt cwd。 name 也可以包含完整或相对路径,它也可以。

最佳答案

我会使用 PathLib并按照这些思路做一些事情:

from pathlib import Path 

def new_fn(fn, sep='_'):
p=Path(fn)
if p.exists():
if not p.is_file():
raise TypeError
np=p.resolve(strict=True)
parent=str(np.parent)
extens=''.join(np.suffixes) # handle multiple ext such as .tar.gz
base=str(np.name).replace(extens,'')
i=2
nf=parent+base+sep+str(i)+extens
while Path(nf).exists():
i+=1
nf=parent+base+sep+str(i)+extens
return nf
else:
return p.parent.resolve(strict=True) / p

这只处理写入的文件,但同样的方法也适用于目录(您稍后添加的目录)。我将把它作为一个项目留给读者。

关于python - 一种创建文件和目录而不覆盖的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53232299/

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