首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如果目标路径已经存在,重命名并移动文件?

如果目标路径已经存在,重命名并移动文件?
EN

Stack Overflow用户
提问于 2018-12-03 09:03:12
回答 2查看 159关注 0票数 0

我正在尝试创建一个脚本,将所有图片从我的downloads文件夹移动到我的图片文件夹。我的脚本工作到目前为止(移动文件),除非它试图移动目标文件夹中已经具有相同名称的文件-就像使用printscreen一样。如果printscreen1.png已经存在于图片中,它将不会移动文件。

对于这样的文件,我想要重命名文件并将日期或时间添加到文件名中,然后在不替换原始printscreen的情况下移动它,这样我就可以让这两个和所有的printscreen继续运行下去。

代码语言:javascript
代码运行次数:0
运行
复制
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")

下面是我的错误消息:

代码语言:javascript
代码运行次数:0
运行
复制
raise Error, "Destination path '%s' already exists" % real_dst
shutil.Error: Destination path 'B:\Pictures\printscreen1.png' already exists

这就是我到目前为止所拥有的,我将感谢任何帮助或建议。谢谢

EN

回答 2

Stack Overflow用户

发布于 2018-12-03 09:29:34

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

代码语言:javascript
代码运行次数:0
运行
复制
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
票数 0
EN

Stack Overflow用户

发布于 2018-12-03 09:29:56

为什么不在搬家前检查一下。类似于下面的内容

注意:如果文件存在,您可以执行不同类型的重命名。我只需将_new附加到扩展中。不完全是你想要的,但这应该会给出一个想法

代码语言:javascript
代码运行次数:0
运行
复制
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)

在运行之前

代码语言:javascript
代码运行次数:0
运行
复制
dst:
tmp.jpg

src:
tmp.jpg

运行后

代码语言:javascript
代码运行次数:0
运行
复制
dst:
tmp.jpg  tmp.jpg_new

src:
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53586190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档