所以我觉得我可能在Google / StackOverflow上使用了错误的单词来查找代码。
我正在构建一个脚本(其中包括)将会执行大量移动文件。
我目前有一条线要从扩展名拆分文件名,如果文件已存在于目录中,则添加文件名+(复制)+扩展名。
然而,我觉得有一个简单的小单行,基本上会做(复制),(复制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
我使用了一种略微改变的方法来获取文件名和扩展名(基本上只是为了解决一些rar部分和一些文件夹问题)。但是'self.filename(f)和self.extension(f)基本上只是os.splittext(f)[0]和os.splittext(f)[1]。
答案 0 :(得分:4)
当然,是一些单行来做这件事,但我想不出一个非常易读的。我会选择这样的东西:
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))
(这可能基本上就是你所做的,但你没有发布你的代码。)