3 回答

TA贡献1818条经验 获得超11个赞
如果文件已经存在,我们要创建一个新文件而不是覆盖它。
for filname in filelistsrc:
if os.path.exists(dictfiles[filename]):
i, temp = 1, filename
file_name, ext = filename.split("/")[-1].split(".")
while os.path.exists(temp):
temp = os.path.join(strdest, f"{file_name}_{i}.{ext}")
dictfiles[filename] = temp
i += 1
shutil.move(filename, dictfiles[filename])
检查目的地是否存在。如果是,请创建一个新目标并移动文件。

TA贡献1780条经验 获得超5个赞
在最后一个 for 循环中移动它之前,您可以检查文件是否已经存在,并取决于移动它的结果。我做了一个递归函数来检查文件名并递增它直到文件名是新的:
import os
def renamefile(ffpath, idx = 1):
#Rename the file from test.jpeg to test1.jpeg
path, ext = os.path.splitext(ffpath)
path, filename = path.split('/')[:-1], path.split('/')[-1]
new_filename = filename + str(idx)
path.append(new_filename + ext)
path = ('/').join(path)
#Check if the file exists. if not return the filename, if it exists increment the name with 1
if os.path.exists(path):
print("Filename {} already exists".format(path))
return renamefile(ffpath, idx = idx+1)
return path
for filename in filelistsrc:
if os.path.exists(filename):
renamefile(filename)
shutil.move(filename, dictfiles[filename])

TA贡献1846条经验 获得超7个赞
这是另一个解决方案,
def move_files(str_src, str_dest):
for f in os.listdir(str_src):
if os.path.isfile(os.path.join(str_src, f)):
# if not .html continue..
if not f.endswith(".html"):
continue
# count file in the dest folder with same name..
count = sum(1 for dst_f in os.listdir(str_dest) if dst_f == f)
# prefix file count if duplicate file exists in dest folder
if count:
dst_file = f + "_" + str(count + 1)
else:
dst_file = f
shutil.move(os.path.join(str_src, f),
os.path.join(str_dest, dst_file))
添加回答
举报