照片信息的读取与分类(1)

|---------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------|
| 拿到了照片的拍摄时间后,就可以根据拍摄的年份和月份来确定照片要移动到的文件夹路径了。现在我们来分析一下如何从表示拍摄时间这个字符串中(2015:12:10 21:08:08 )提取出拍摄的年份和月份。 整个字符串由一个空格将拍摄的日期和具体的时间分隔开来 | |

|------------------------------------------------------------|----------------------------------------------------------------------------|
| 在拍摄日期的部分中,拍摄的年、月、日又被两个冒号分隔开来。 同样的,拍摄时间也被两个冒号分隔成了时、分、秒三个部分。 | |

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 将示例中拍摄日期分隔成日期和时间,把分隔后的列表赋值给变量takeTimeParts,然后使用两个print分别输出日期和时间。 |
| 要对拍摄时间的字符串进行拆解,我们可以使用字符串的内置函数split()。 将++分隔符++ 作为参数传入到split()函数中,即可把字符串按照指定分隔符切分成多个字符串组成的列表。 例如: 字符串 2015:12:10 21:08:08 被"空格"切分后就变成了 ["2015:12:10", "21:08:08"] |
| |
| |

把拍摄日期通过冒号分隔,分成年、月、日三部分,赋值给变量photoDateParts。再使用print分别输出年、月、日。

|-------------------------------------------------------------------------------------------------------------|
| 将整个拍摄日期通过空格切分后,我们需要把分隔后的"年月日"部分单独赋值给变量photoDate。 然后对此字符串再调用一次split()函数,通过冒号将日期分隔成年、月、日。 注意:需要使用英文冒号 : 进行切分。 |
| |
| |

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 利用格式化字符串拼出文件夹名称,并赋值给变量targetFolderName,再使用os.path.join()函数拼出分类文件夹的路径, 并赋值给photoTargetPath变量。最后输出变量photoTargetPath。 |
| 学会了通过分隔字符串来提取拍摄的年、月、日之后,下一步就可以通过格式化字符串的方式,以年份和月份为参数给照片文件夹进行命名了(命名格式:xxxx年xx月)。 因为分类的文件夹依然位于 /Volumes/backup/照片路径下,所以我们可以直接使用++os.path.join()++ 函数拼出分类文件夹的相对路径。 |
| |
| |

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 使用os.path.exists()函数判断照片分类的文件夹是否存在,如果不存在,就使用os.mkdir()函数创建文件夹。 |
| 1 # 导入os模块 2 import os 3 4 # 导入ezexif模块 5 import ezexif 6 7 # 修改当前工作目录到/Volumes/backup 8 os.chdir('/Volumes/backup') 9 10 # 待处理照片的相对路径 11 backupPhotoPath = "照片" 12 13 # 使用函数os.listdir()获取所有待处理照片文件列表 14 photoList = os.listdir(backupPhotoPath) 15 16 # 遍历文件列表 17 for photo in photoList: 18 # 使用os.path.join()函数组合得到照片文件路径,并赋值给变量photoPath 19 photoPath = os.path.join(backupPhotoPath, photo) 20 # 获取exif信息 21 exifInfo = ezexif.process_file(photoPath) 22 # 获取拍摄时间 23 takeTime = exifInfo["EXIF DateTimeOriginal" |
| 接下来,我们就需要使用在前面课程中学过的++os.path.exists()++ 函数来判断目标文件夹是否存在。 如果目标文件夹不存在,就使用++os.mkdir()++ 函数创建文件夹。 |
| |

导入内置模块shutil,然后将照片文件通过shutil.move()函数移动到目标文件夹。

确保文件夹创建好后,我们只需要使用++shutil.move()++ 函数,就可以完成今天问题的最后一步:将照片移动到目标文件夹啦。
注意,使用shutil.move()函数前,记得先使用import导入shutil内置模块哦。

1

导入os模块

2

import os

3

4

导入ezexif模块

5

import ezexif

6

7

导入shutil模块

8

import shutil

9

10

修改当前工作目录到/Volumes/backup

11

os.chdir('/Volumes/backup')

12

13

将待处理照片的相对路径赋值给backupPhotoPath

14

backupPhotoPath = "照片"

15

16

使用函数os.listdir()获取所有待处理照片文件列表

17

photoList = os.listdir(backupPhotoPath)

18

19

遍历文件列表

20

for photo in photoList:

21

使用os.path.join()函数组合得到照片文件路径,并赋值给变量photoPath

22

photoPath = os.path.join(backupPhotoPath, photo)

23

获取exif信息

24

exifInfo = ezexif.process_file(photoPath)

25

获取拍摄时间

26

takeTime = exifInfo["EXIF DateTimeOriginal"]

27

通过空格分隔成拍摄日期和拍摄时间

28

takeTimeParts = takeTime.split(" ")

29

分隔后的字符串列表第一个元素就是拍摄日期,赋值给变量photoDate

30

photoDate = takeTimeParts[0]

31

再把拍摄日期通过冒号分隔,分成年、月、日三部分,赋值给变量photoDateParts

32

photoDateParts = photoDate.split(":")

33

34

利用格式化字符串拼出文件夹名称

35

targetFolderName = f"{photoDateParts[0]}年{photoDateParts[1]}月"

36

使用os.path.join()函数拼出分类文件夹的路径, 并赋值给photoTargetPath变量

37

photoTargetPath = os.path.join(backupPhotoPath, targetFolderName)

38

39

如果目标文件夹不存在,使用os.mkdir()函数创建文件夹

40

if not os.path.exists(photoTargetPath):

41

os.mkdir(photoTargetPath)

42

43

移动到目标文件夹

44

shutil.move(photoPath, photoTargetPath)

shutil.move()函数可以用来移动文件或文件夹。它接收两个参数,第一个参数是要移动的文件(夹)路径,第二个参数是目标文件(夹)的路径。

相关推荐
小白小白从不日白13 分钟前
react 组件化开发_生命周期_表单处理
前端·react.js
weixin_4177599923 分钟前
97-java流式处理优点
java·开发语言
AskHarries25 分钟前
Spring Boot集成Akka Cluster实现在分布式节点中执行任务
java·spring boot·maven·akka
计算机编程-吉哥26 分钟前
计算机毕业设计 网上书店系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试
java·spring boot·毕业设计·毕业论文·计算机毕业设计选题·计算机毕业设计开题报告·网上书店系统
我爱豆子34 分钟前
Leetcode Hot 100刷题记录 -Day14(矩阵置0)
java·算法·leetcode·矩阵
程序员古德37 分钟前
《论负载均衡技术在Web系统中的应用》写作框架,软考高级系统架构设计师
前端·系统架构·负载均衡
方圆师兄41 分钟前
k8s 常见问题梳理
java·kubernetes
骆晨学长1 小时前
基于Springboot的校园防疫管理系统的设计与实现
java·spring boot·后端
java1234_小锋1 小时前
免费分享一套SpringBoot+Vue学生信息管理系统【论文+源码+SQL脚本】,帅呆了~~
java·springboot·java毕业设计·学生信息·java学生信息·springboot学生信息·vue学生信息
小白小白从不日白1 小时前
TS axios封装
前端·typescript