python - 如何使用脚本从 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.jpg
下
MainFolder/2019_7_04_0800.jpg
一个小时的照片。
目前我有一个文件夹噩梦,每个图像都命名为00[R][0@0][0].jpg
.
解决方案
您可以通过使用该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))
推荐阅读
- css - 如何从布尔玛模式卡标题中删除关闭按钮?
- linux - 非 RT Linux 内核上的 FIFO/RR 调度程序有多“实时”?
- android - 如何在 AndroidX 中实例化 ViewModel?
- angular - 升级到 Angular 7 后 PrimeNG 树表不呈现
- typescript - Typescript - 更改函数返回类型
- python - Pandas - 将浮点数转换为正确的日期时间或时间对象
- python - pandas datetime 到 unix 时间戳秒
- rust - Cryptopals 在计算密钥大小时挑战 6 个不正确的结果
- excel - 如何根据多行的单元格值合并单元格
- html - 从 PDF 创建图像(PNG 或 JPEG)以及图像中文本的 HTML 图像映射?