如何复制具有特定扩展名的文件夹目录中的文件,然后将其保存到新文件夹中而不覆盖已复制的文件?

时间:2019-01-09 14:29:18

标签: python shutil

这是我正在处理的代码:

from qgis.core import*
import glob, os, shutil, time, qgis

path = r"C:\Temp\testinput"
dest = r"C:\Temp\testoutput"

fname = []
for root,d_names,f_names in os.walk(path):
    for f in f_names:
        if f.endswith('.kml'):
            src = os.path.join(root,f)
            print(time.strftime('%m/%d/%Y', time.gmtime(os.path.getmtime(src))))
            print(os.path.realpath(src))
            shutil.copy2(src, dest)

此代码遍历目录并复制文件,但会覆盖具有相同名称的文件。如何防止覆盖部分?如果我在新文件夹中捕获到具有相同名称的文件,我希望将相同类型的文件重命名为“ filename-copy”。

1 个答案:

答案 0 :(得分:0)

非常快速的答案;

如果知道扩展名,那就不难了。您可以预先检查文件是否存在。通过添加类似的内容

exists = os.path.isfile(dest)
if exists:
    os.rename(dest , dest.replace('.kml', '-copy.kml'))

所以整个事情看起来像这样:

from qgis.core import*
import glob, os, shutil, time, qgis

path = r"C:\Temp\testinput"
dest = r"C:\Temp\testoutput"

fname = []
for root,d_names,f_names in os.walk(path):
    for f in f_names:
        if f.endswith('.kml'):
            src = os.path.join(root,f)
            print(time.strftime('%m/%d/%Y', time.gmtime(os.path.getmtime(src))))
            print(os.path.realpath(src))
            exists = os.path.isfile(dest)
            if exists:
                os.rename(dest , dest.replace('.kml', '-copy.kml'))
            shutil.copy2(src, dest)

答案不是很快;

但是,这假定“ file-copy.kml”尚不存在。如果要保留X份副本,则可以使用其他名称重命名。 在这种情况下,我会建议如下:

    exists = os.path.isfile(dest)
    if exists:
        os.rename(dest , dest.replace('.kml', '-copy_'+id_generator()+'.kml'))

将此位置放置在文件顶部。

import string
import random
def id_generator(size=6, chars=string.ascii_uppercase + string.digits):
    return ''.join(random.choice(chars) for _ in range(size))

在哪里借用了从该问题生成一些随机字符的函数; Here's a codepen demo