首页 > 解决方案 > 如何使用脚本从 DVR 移动和重命名图像?

问题描述

我有一台 DVR 摄像机,它每小时拍摄一次图像并将每个图像存储在自己的文件夹中。我想使用 python 脚本将所有图像移动到一个主文件夹中,并根据它们所在的文件夹重命名它们。当前文件夹结构如下所示。

图片 1 -MainFolder/2019-07-04/001/jpg/07/00/00[R][0@0][0].jpg

图 2 -MainFolder/2019-07-04/001/jpg/08/00/00[R][0@0][0].jpg

图 3 -MainFolder/2019-07-04/001/jpg/09/00/00[R][0@0][0].jpg

第二天的图像将是

图片 25 -MainFolder/2019-07-05/001/jpg/07/00/00[R][0@0][0].jpg

上述参考中的 /jpg/07/00 是早上 7:00。

我想要 MainFolder/2019_7_04_0700.jpgMainFolder/2019_7_04_0800.jpg一个小时的照片。

目前我有一个文件夹噩梦,每个图像都命名为00[R][0@0][0].jpg.

标签: pythonimagejpegrenamemove

解决方案


您可以通过使用该os.walk()函数来查找所有相机图像文件,并使用该pathlib模块来获取构建目标文件名所需的路径组件来做到这一点。获得源文件和目标文件的完整路径后,您可以使用该shutil.move()功能移动和重命名每个文件。

注意:该代码至少需要 Python 3.4 才能运行,因为它使用了pathlib并且我已经注释掉了实际执行移动和重命名的行,因此您可以安全地运行和测试脚本以查看它会做什么而不做任何损坏。

import os
import pathlib
import shutil


IMAGE_FILENAME = '00[R][0@0][0].jpg'
EXT = os.path.splitext(IMAGE_FILENAME)[1]  # Image file extension.
root = 'MainFolder'
count = 0

for dir_name, sub_dirs, files in os.walk(root, topdown=False):
    for filename in files:
        if filename == IMAGE_FILENAME:
            src = os.path.join(dir_name, filename)
            relpath = os.path.relpath(src, root)  # Relative to root folder.
            parts = pathlib.Path(relpath).parts  # Relative path components.
            dst = os.path.join(root, parts[0] + '_' + parts[3] + parts[4] + EXT)
            print(' moving "{}" to "{}"'.format(src, dst))
#            shutil.move(src, dst)
            count += 1

print('{} files moved'.format(count))

推荐阅读