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

通过Python的各种模块我们可以很方便的获取到文件的各种属性数据,比如文件修改时间、文件大小或是本节课获取到的照片拍摄时间等。
获取到了这些数据后,我们就可以对文件按照需求进行移动、改名甚至删除等操作。
配合Python批量处理文件的优势,我们就能实现各种个性化的文件高效操作需求。

在运行各种跟文件打交道的程序时,比较常出现的错误是“文件未找到错误(FileNotFoundError)”。
 

出现这种问题,可能是因为文件本身就不存在,但也有可能是由于对各种路径的概念不熟悉而导致的代码错误。

所以在着手解决今天的问题之前,我们需要先继续深入学习路径相关的概念,帮助大家理解和规避“文件未找到错误”。

工作目录

每一个Python程序运行的时候,都有一个工作目录(Working Directory)显示当前的Python程序是运行在哪一个路径之下。
也就是说,所有Python程序在运行时,都有一个“上班的地方”,叫做工作目录。
工作目录可以在程序中使用代码修改。

当使用代码编辑器VS Code运行单个Python文件时,在不同的操作系统中,工作目录也不一样。
Windows系统默认的工作目录在C:\Users\{用户名},macOS系统默认的工作目录在/Users/{用户名}。
其中,{用户名}是操作系统中的用户名字。

相对路径

我们在第一节课中学习到,Windows系统中的路径是以盘符+冒号开始,在macOS系统中是以正斜线( / )开始。

其实这种以盘符+冒号或正斜线( / )开始的路径又叫绝对路径(Absolute Path)。

与绝对路径对应的概念叫作相对路径(Relative Path),指直接以文件或文件夹的名称开头,相对于工作目录的路径位置。
比如工作目录为:/Users/yequ
相对路径为: aha/答辩.pptx
对应的绝对路径就是:
/Users/yequ/aha/答辩.pptx
如果相对路径为:自拍.jpg
对应的绝对路径就是:
/Users/yequ/自拍.jpg

脱离了工作目录,单独存在的相对路径没有意义。
而同时有了相对路径和工作目录,就可以定位到具体位置的绝对路径。
在程序中,使用相对路径可以避免频繁地输入完整文件路径,起到简化代码的作用。

回到阿文照片整理的问题上来,阿文的移动硬盘插上macOS操作系统的电脑后,显示的路径为:/Volumes/backup
该移动硬盘的文件结构如图。
待整理的照片都在“照片”文件夹中。

使用print输出当前的工作目录。

为了方便后续代码的操作,我们先来查看一下现在这个Python程序运行的工作目录在哪里,然后将工作目录切换到移动硬盘的路径下。
使用os.getcwd()函数可以用来获取当前程序的工作目录。
在第一课中我们学过,使用函数之前需要先导入os模块。

先使用print输出当前工作目录,然后将工作目录修改为/Volumes/backup,最后再输出当前工作目录以确认修改成功。

通过前面的代码运行发现,当前的工作目录并不在移动硬盘路径/Volumes/backup下。
要修改程序运行时的工作目录,需要使用os.chdir()函数。
将新的路径作为参数传入该函数,即可将工作目录修改到目标路径。

修改代码

将照片备份文件夹的相对路径赋值给变量backupPhotoPath,使用os.listdir()函数获取该文件夹下所有的文件列表并赋值给变量photoList,然后遍历该文件列表,并在遍历代码中输出文件名。

刚才我们已经知道,阿文待处理照片的文件夹的绝对路径为 /Volumes/backup/照片
将工作目录修改到移动硬盘路径/Volumes/backup/后,此文件夹的相对路径也就变成“照片”了。
我们可以直接将这个相对路径作为参数传入到函数os.listdir()中,来获取所有待处理的照片文件列表。

结合有代码,对程序进行补全,完成修改工作目录到"/Volumes/backup"遍历并输出所有的图片文件。

将照片按照时间分类并移动到指定文件夹中

正常情况下,每一张用手机或者相机拍照片都会带有EXIF(Exchangeable image file format)信息。
而这个EXIF信息中就有每张照片拍摄的时间。要通过Python去读取照片的EXIF信息,可以使用ezexif这个模块。
ezexif不是一个内置模块,所以在使用前要先通过代码 pip install ezexif 进行安装。
如果在自己电脑上安装不上或安装缓慢,可在命令后添加
pip install ezexif -i https://pypi.tuna.tsinghua.edu.cn/simple/
进行加速

导入ezexif模块,然后在遍历文件列表的代码中获取照片的拍摄时间,并使用print输出。

安装了ezexif模块后,只需要将照片路径传入ezexif.process_file()函数就可以获得一个包含图片EXIF信息的字典(dict)
通过这个字典访问“EXIF DateTimeOriginal”属性即可获得照片的拍摄时间。
需要注意的是,每一张照片的路径需要使用前面学过的os.path.join()函数将文件夹相对路径和照片文件名来组合。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/878767.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

elementUI table 给表头添加气泡显示(鼠标悬浮显示注释)

elementUI table 给表头添加气泡显示(鼠标悬浮显示注释) 前言:文档显示:(使用插槽,我看看到底是怎么个事儿)文档代码:修改后的效果:页面效果: 前言: 公司出现…

【ACM出版】2024年第四届工商管理与数据科学国际学术会议 (BADS 2024,10月25-27)

2024年第四届工商管理与数据科学国际学术会议(BADS 2024)将于2024年10月25-27日在中国重庆召开,大会由喀什大学支持。 在当今全球化与数字化迅速发展的时代,工商管理与数据科学作为推动经济增长和技术进步的重要力量,正以前所未有的速度交叉融…

骨传导耳机哪款好?精选五款热门骨传导耳机分享让你避免踩雷

目前在市面当中,骨传导耳机被称之为是黑科技耳机,骨传导耳机拥有很多优势,在听歌时不需要入耳,不会伤耳朵。随着骨传导耳机品牌的不断发展,人们在选购骨传导耳机时,也会觉得非常困难,可能一不小…

【知识图谱】4、LLM大模型结合neo4j图数据库实现AI问答的功能

昨天写了一篇文章,使用fastapi直接操作neo4j图数据库插入数据的例子, 本文实现LLM大模型结合neo4j图数据库实现AI问答功能。 废话不多说,先上代码 import gradio as gr from fastapi import FastAPI, HTTPException, Request from pydantic…

STM32CubeMX软件配置及点灯操作(基于STM32F4系列+HAL库)

注:本文主要记录一下STM32CubeMX软件的使用流程。 01 软件安装 1.keil 需要安装以下支持包(keil在线安装里没有对应芯片支持包)。 2.STM32CubeMX 安装库: 3.串口助手 02 硬件连接 该原理图来源于学益得在线课堂教学项目《RTOS项目实战:从PCB到Free…

STM32F407ZGT6单片机HAL库——DAC输出

一、输出直流电压 1.cubemax的配置(通道1) 2.直流电压大小计算 3.主函数加入初始化的程序 float DAC_voltage1.5;HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, DAC_voltage*4095/3.3);//HAL_DAC_Start(&hdac,DAC_CHANNEL_1); 二、…

(一)模式识别——基于SVM的道路分割实验(附资源)

写在前面:本报告所有代码公开在附带资源中,无法下载代码资源的伙伴私信留下邮箱,小编24小时内回复 一、实验目的 1、实验目标 学习掌握SVM(Support Vector Machine)算法思想,利用MATLAB的特定工具箱和库函…

【2024高教社杯全国大学生数学建模竞赛】ABCDEF题 问题分析、模型建立、参考文献及实现代码

【2024高教社杯全国大学生数学建模竞赛】ABCDEF题 问题分析、模型建立、参考文献及实现代码 1 比赛时间 北京时间:2024年9月5日 18:00-2024年9月8日20:00 2 思路内容 2.1 往届比赛资料 【2022高教社杯数学建模】C题:古代玻璃制品的成分分析与鉴别方案…

AI学习记录 - 旋转位置编码

创作不易,有用点赞,写作有利于锻炼一门新的技能,有很大一部分是我自己总结的新视角 1、前置条件:要理解旋转位置编码前,要熟悉自注意力机制,否则很难看得懂,在我的系列文章中有对自注意力机制的…

OpenFeign请求拦截器,注入配置属性类(@ConfigurationProperties),添加配置文件(yml)中的token到请求头

一、需求 OpenFeign请求拦截器,注入配置属性类(ConfigurationProperties),添加配置文件(yml)中的token到请求头 在使用Spring Boot结合OpenFeign进行微服务间调用时,需要在发起HTTP请求时添加一…

MLLM(二)| 阿里开源视频理解大模型:Qwen2-VL

2024年8月29日,阿里发布了 Qwen2-VL!Qwen2-VL 是基于 Qwen2 的最新视觉语言大模型。与 Qwen-VL 相比,Qwen2-VL 具有以下能力: SoTA对各种分辨率和比例的图像的理解:Qwen2-VL在视觉理解基准上达到了最先进的性能&#…

Apache Guacamole 安装及配置VNC远程桌面控制

文章目录 官网简介支持多种协议无插件浏览器访问配置和管理应用场景 Podman 部署 Apache Guacamole拉取 docker 镜像docker-compose.yml部署 PostgreSQL生成 initdb.sql 脚本部署 guacamole Guacamole 基本用法配置 VNC 连接 Mac 电脑开启自带的 VNC 服务 官网 https://guacam…

Gmtracker安装中存在的问题

Gmtracker安装中存在的问题 GMtracker安装问题该如何解决? 使用用服务器,在云服务器中使用conda环境 python 3.6的版本环境. pip install -r requirements.txt 在网上查找资料:opencv安装失败卡在这里是因为没有使用高版本的python环境 切换…

pdf在线转换成word免费版,一键免费转换

在日常的学习和办公中,PDF文件和Word文档是我们离不开的两种最常见的文件,而PDF与Word文档之间的转换成为了我们日常工作中不可或缺的一部分。无论是为了编辑、修改还是共享文件,掌握多种PDF转Word的方法都显得尤为重要。很多小伙伴关心能不能…

SpringSecurity Oauth2 - 密码模式完成身份认证获取令牌 [自定义UserDetailsService]

文章目录 1. 授权服务器2. 授权类型1. Password (密码模式)2. Refresh Token(刷新令牌)3. Client Credentials(客户端凭证模式) 3. AuthorizationServerConfigurerAdapter4. 自定义 TokenStore 管理令牌1. TokenStore 的作用2. Cu…

springweb获取请求数据、spring中拦截器

SpringWeb获取请求数据 springWeb支持多种类型的请求参数进行封装 1、使用HttpServletRequest对象接收 PostMapping(path "/login")//post请求//spring自动注入public String login(HttpServletRequest request){ System.out.println(request.getParameter("…

J.U.C Review - CopyOnWrite容器

文章目录 什么是CopyOnWrite容器CopyOnWriteArrayList优点缺点源码示例 仿写:CopyOnWriteMap的实现注意事项 什么是CopyOnWrite容器 CopyOnWrite容器是一种实现了写时复制(Copy-On-Write,COW)机制的并发容器。在并发场景中&#…

半导体产业核心环节有哪些?2024年中国半导体产业研究报告大揭秘!

半导体指常温下导电性能介于导体与绝缘体之间的材料。半导体应用在集成电路、消费电子、通信系统、光伏发电、照明应用、大功率电源转换等领域。半导体产业经济则是指以半导体产品为核心的经济活动,包括芯片设计、制造、封装测试及应用等。它是全球经济的支柱&#…

【mysql】mysql修改sql_mode之后无法启动

现象:修改后mysql无法启动,不报错 原因:MySQL在8以后sql_mode已经取消了NO_AUTO_CREATE_USER这个关键字。去掉这个关键字后,启动就可以了 修改前: sql_modeSTRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR…

在线演示文稿应用PPTist本地化部署并实现无公网IP远程编辑PPT

文章目录 前言1. 本地安装PPTist2. PPTist 使用介绍3. 安装Cpolar内网穿透4. 配置公网地址5. 配置固定公网地址 前言 本文主要介绍如何在Windows系统环境本地部署开源在线演示文稿应用PPTist,并结合cpolar内网穿透工具实现随时随地远程访问与使用该项目。 PPTist …