我有一台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.jpg
和
MainFolder/2019_7_04_0800.jpg
查看下一个小时的照片。
当前,我有一个文件夹梦night,每个图像都名为00[R][0@0][0].jpg
。
答案 0 :(得分:1)
您可以使用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))