【问题标题】:Rename and Move file if destination path already exists?如果目标路径已经存在,重命名和移动文件?
【发布时间】:2019-05-04 07:12:57
【问题描述】:

我正在尝试创建一个脚本,将所有图片从我的下载文件夹移动到我的图片文件夹。我的脚本工作到此为止(将文件移动过来),除非它尝试移动目标文件夹中已经具有相同名称的文件 - 就像打印屏幕一样。如果 printscreen1.png 在图片中已经存在,它不会移动文件。

对于这样的文件,我想重命名文件并将日期或时间添加到文件名中,然后在不替换原始打印屏幕的情况下移动它,这样我就可以让这两个和所有打印屏幕都面向未来。

import os
import shutil
import datetime

downloadsb = os.path.join('B:\\Downloads')
pictures = os.path.join('B:\\Pictures')

for f in os.listdir(downloadsb):
    if f.endswith((".jpg", ".gif", ".jpeg", ".png", ".ico", ".psd", ".sfw", ".webp", ".pdd", ".psb", ".bmp", ".rle", ".dib", ".eps", ".iff", ".tdi", ".jpf",
    ".jpx", ".jp2", ".j2c", ".jxk", ".jpc", ".jps", ".mp0", ".pcx", ".pdp", ".raw", ".pxr", ".pns")):
        shutil.move(os.path.join(downloadsb, f), pictures)
        
    if os.path.isfile(f):
                os.rename(f,f + "date")

这是我的错误信息:

raise Error, "Destination path '%s' already exists" % real_dst
shutil.Error: Destination path 'B:\Pictures\printscreen1.png' already exists

这是我目前所拥有的,如果有任何帮助或建议,我将不胜感激。谢谢

【问题讨论】:

  • 您现在尝试移动文件后正在重命名文件;这可能应该发生在以前。

标签: python file-rename


【解决方案1】:

有一个内置库可以检查文件是否为图像。此外,您需要遍历目录(文件夹)中的文件。像这样的东西应该可以工作(未经测试):

import os
import shutil
import datetime
import imghdr

downloadsb = os.path.join('B:\\Downloads')
pictures = os.path.join('B:\\Pictures')

files = os.listdir(downloadsb)

for f in files:
    try:
        imghdr.what(f)
        dest_name = f
        if os.path.exists( os.path.join(pictures, dest_name) ):
            dest_name += datetime.datetime.now().strftime('%H%M%S')
        shutil.move(os.path.join(downloadsb, f),
                    os.path.join(pictures, dest_name))

    except Exception as e:
        continue

【讨论】:

    【解决方案2】:

    为什么不在搬家前检查一下。类似下面的东西

    注意:当文件存在时,您可以进行不同类型的重命名。我只是附加 _new (到扩展名)。不完全是你想要的,但这应该给出一个想法

    import os
    import shutil
    import datetime
    import glob
    
    downloadsb = os.path.join('src')
    pictures = os.path.join('dst')
    
    for f in glob.glob(downloadsb + '/*'):
        if f.endswith(
            (".jpg", ".gif", ".jpeg", ".png", ".ico", ".psd", ".sfw", ".webp", ".pdd", ".psb", ".bmp",
             ".rle", ".dib", ".eps", ".iff", ".tdi", ".jpf", ".jpx", ".jp2", ".j2c", ".jxk", ".jpc", ".jps",
             ".mp0", ".pcx", ".pdp", ".raw", ".pxr", ".pns")):
    
            dstFile = os.path.join(pictures, os.path.split(f)[1])
            if os.path.exists(dstFile):
                # Do whatever you want to rename the file here
                shutil.move(f, dstFile + '_new')
            else:
                shutil.move(f, dstFile)
    

    运行前

    dst:
    tmp.jpg
    
    src:
    tmp.jpg
    

    运行后

    dst:
    tmp.jpg  tmp.jpg_new
    
    src:
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-14
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 2013-05-26
      • 1970-01-01
      • 2018-08-02
      相关资源
      最近更新 更多