重命名Python存在的文件

Rob*_*ood 2 python rename

所以我觉得我可能使用了错误的单词在Google / StackOverflow上四处寻找代码。

我正在构建一个脚本,该脚本(除其他事项外)将做很多移动文件的操作。

我目前有一点行,用于从扩展名中拆分文件名,如果目录中已存在该文件,则添加Filename +(重复)+ Extension。

但是,我觉得这里有一个简单的小单行代码,本质上可以做到(重复),(重复1),(重复2),(重复3)等(基本上只是将第二个数字更改为下一个)编号(如果文件与当前文件一起存在)。

我太愚蠢而无法弄清楚自己的简单解决方案是什么?

抱歉,我没有想到我当前的代码可以帮助人们回答我的问题!

def destination(self, f): return os.path.abspath('.')+'/'+self.filename(f)+'/'+self.filename(f)+' (Duplicate)'+self.extension(f) if and os.path.isfile(os.path.abspath('.')+'/'+self.filename(f)+'/'+f) else os.path.abspath('.')+'/'+self.filename(f)+'/'+f
Run Code Online (Sandbox Code Playgroud)

我使用了一种略有更改的方法来获取文件名和扩展名(本质上只是为了解决一些rar部分和一些文件夹问题)。但是'self.filename(f)和self.extension(f)基本上只是os.splittext(f)[0]和os.splittext(f)[1]。

Sve*_*ach 5

当然,也有一些的一行来做到这一点,但我想不出一个非常可读之一。我想要这样的东西:

def alternative_names(filename):
    yield filename
    base, ext = os.path.splitext(filename)
    yield base + "(Duplicate)" + ext
    for i in itertools.count(1):
        yield base + "(Duplicate %i)" % i + ext

target_name = next(alt_name
                   for alt_name in alternative_names(target_name)
                   if not os.path.exists(alt_name))
Run Code Online (Sandbox Code Playgroud)

(这可能基本上就是您所做的,但是您没有发布代码。)