如何使用脚本从 DVR 移动和重命名图像?

How do I move and rename images from a DVR with a script?

我有一个 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:00am的。

我愿意 MainFolder/2019_7_04_0700.jpgMainFolder/2019_7_04_0800.jpg下一小时的照片。

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

您可以通过使用 os.walk() function to find all the camera image files, and the pathlib module to get the components of the path needed to construct the destination filename. Once you have the full paths of the source and destiniation files, you can then use the shutil.move() 函数移动和重命名每一个来做到这一点。

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

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))