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

2024-09-07 15:28
文章标签 读取 分类 信息 照片

本文主要是介绍照片信息的读取与分类(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()函数可以用来移动文件或文件夹。它接收两个参数,第一个参数是要移动的文件(夹)路径,第二个参数是目标文件(夹)的路径。

这篇关于照片信息的读取与分类(1)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1145431

相关文章

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

【北交大信息所AI-Max2】使用方法

BJTU信息所集群AI_MAX2使用方法 使用的前提是预约到相应的算力卡,拥有登录权限的账号密码,一般为导师组共用一个。 有浏览器、ssh工具就可以。 1.新建集群Terminal 浏览器登陆10.126.62.75 (如果是1集群把75改成66) 交互式开发 执行器选Terminal 密码随便设一个(需记住) 工作空间:私有数据、全部文件 加速器选GeForce_RTX_2080_Ti

matlab读取NC文件(含group)

matlab读取NC文件(含group): NC文件数据结构: 代码: % 打开 NetCDF 文件filename = 'your_file.nc'; % 替换为你的文件名% 使用 netcdf.open 函数打开文件ncid = netcdf.open(filename, 'NC_NOWRITE');% 查看文件中的组% 假设我们想读取名为 "group1" 的组groupName

Linux命令(11):系统信息查看命令

系统 # uname -a # 查看内核/操作系统/CPU信息# head -n 1 /etc/issue # 查看操作系统版本# cat /proc/cpuinfo # 查看CPU信息# hostname # 查看计算机名# lspci -tv # 列出所有PCI设备# lsusb -tv

用Pytho解决分类问题_DBSCAN聚类算法模板

一:DBSCAN聚类算法的介绍 DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,DBSCAN算法的核心思想是将具有足够高密度的区域划分为簇,并能够在具有噪声的空间数据库中发现任意形状的簇。 DBSCAN算法的主要特点包括: 1. 基于密度的聚类:DBSCAN算法通过识别被低密

【小迪安全笔记 V2022 】信息打点9~11

第9天 信息打点-CDN绕过篇&漏洞回链8接口探针&全网扫指&反向件 知识点: 0、CDN知识-工作原理及阻碍 1、CDN配置-域名&区域&类型 2、CDN绕过-靠谱十余种技战法 3、CDN绑定-HOSTS绑定指向访问 CDN 是构建在数据网络上的一种分布式的内容分发网。 CDN的作用是采用流媒体服务器集群技术,克服单机系统输出带宽及并发能力不足的缺点,可极大提升系统支持的并发流数目,减少或避

Weex入门教程之4,获取当前全局环境变量和配置信息(屏幕高度、宽度等)

$getConfig() 获取当前全局环境变量和配置信息。 Returns: config (object): 配置对象;bundleUrl (string): bundle 的 url;debug (boolean): 是否是调试模式;env (object): 环境对象; weexVersion (string): Weex sdk 版本;appName (string): 应用名字;

argodb自定义函数读取hdfs文件的注意点,避免FileSystem已关闭异常

一、问题描述 一位同学反馈,他写的argo存过中调用了一个自定义函数,函数会加载hdfs上的一个文件,但有些节点会报FileSystem closed异常,同时有时任务会成功,有时会失败。 二、问题分析 argodb的计算引擎是基于spark的定制化引擎,对于自定义函数的调用跟hive on spark的是一致的。udf要通过反射生成实例,然后迭代调用evaluate。通过代码分析,udf在