本文主要是介绍照片信息的读取与分类(1),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
拿到了照片的拍摄时间后,就可以根据拍摄的年份和月份来确定照片要移动到的文件夹路径了。现在我们来分析一下如何从表示拍摄时间这个字符串中(2015:12:10 21:08:08 )提取出拍摄的年份和月份。 |
在拍摄日期的部分中,拍摄的年、月、日又被两个冒号分隔开来。 |
将示例中拍摄日期分隔成日期和时间,把分隔后的列表赋值给变量takeTimeParts,然后使用两个print分别输出日期和时间。 |
要对拍摄时间的字符串进行拆解,我们可以使用字符串的内置函数split()。 |
把拍摄日期通过冒号分隔,分成年、月、日三部分,赋值给变量photoDateParts。再使用print分别输出年、月、日。
将整个拍摄日期通过空格切分后,我们需要把分隔后的“年月日”部分单独赋值给变量photoDate。 |
利用格式化字符串拼出文件夹名称,并赋值给变量targetFolderName,再使用os.path.join()函数拼出分类文件夹的路径, 并赋值给photoTargetPath变量。最后输出变量photoTargetPath。 |
学会了通过分隔字符串来提取拍摄的年、月、日之后,下一步就可以通过格式化字符串的方式,以年份和月份为参数给照片文件夹进行命名了(命名格式:xxxx年xx月)。 |
使用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()函数来判断目标文件夹是否存在。 |
导入内置模块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()函数可以用来移动文件或文件夹。它接收两个参数,第一个参数是要移动的文件(夹)路径,第二个参数是目标文件(夹)的路径。
这篇关于照片信息的读取与分类(1)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!