照片信息的读取与分类(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,一经查实,立即删除!

相关文章

【云计算】锐评国内五大公有云厂商及其OpenAPI

目录 一、概述 二、云平台分析 1、阿里云 2、腾讯云 3、华为云 4、天翼云 5、移动云 一、概述 博主曾深度使用过国内五大公有云厂商,对接过其提供的大量OPEN API接口,此文旨在客观评价云厂商的服务能力,推测其发展过程及技术实力&…

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

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

【经验分享】一个陌生的程序从第一行看发现不懂?教你正确的阅读顺序

很多新手在遇到一个陌生的程序的时候呢,都会从第一行开始读。发现根本看不懂。因为程序的最开始一般都是一些预处理命令,全局变量的定义,还有一些自定义函数的定义和声明部分。我自己看代码有一个习惯。我会从入口函数main开始看。这样才能知道程序最开始会干什么事,然后再…

重启、关闭系统

在Linux系统中,有多个命令可以用来重启和关闭系统。这些命令有不同的使用场景和特点,下面将详细介绍这些命令及其用法。 重启命令 1. reboot reboot是最常用的重启命令,它会立即重启系统。 用法: sudo reboot或者&#xff0c…

【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…

在VMware中的centos stream 9上用packstack安装openstack的单机版

十分钟搭建openstack平台_centos-release-openstack-yoga-CSDN博客

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

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

Dubbo缓存

是的,Dubbo 可以对服务调用结果进行缓存。通过缓存结果,可以减少重复调用、降低服务提供者的负载,并提高系统的响应速度和吞吐量。Dubbo 内置了多种缓存机制,开发者可以根据不同的业务需求选择合适的缓存策略。 1. Dubbo 结果缓存…

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、前置条件:要理解旋转位置编码前,要熟悉自注意力机制,否则很难看得懂,在我的系列文章中有对自注意力机制的…

2409d,d语言非常简单利用sqlite3库

1,在sqlite3d.c中 #include "sqlite3.h"2,直接使用了: import std.conv; import std.stdio; import std.string;import sqlite3d;extern(C) {static int callback(void *NotUsed, int argc, char **argv, char **azColName){int i;for(i0; i<argc; i){printf(&q…

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

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

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

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

kafka单机安装

kafka单机安装 下载地址 官网&#xff1a;https://kafka.apache.org/最新版本下载页面&#xff1a;https://kafka.apache.org/downloads 说明 版本选择&#xff1a;3.0.0&#xff0c;kafka_2.12-3.0.0.tgz下载地址&#xff1a;https://archive.apache.org/dist/kafka/3.0.0…

018、二级Java操作题汇总最新版100000+字

目录 1.基本操作&#xff08;源代码&#xff09;&#xff1a; 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.20 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.30 1.31 1.32 1.33 1.34 1.…

ClickHouse 的安装与基本配置

ClickHouse 是一款高性能的列式数据库管理系统&#xff0c;特别适合用于大数据分析。以下是 ClickHouse 的安装与基本配置步骤&#xff0c;涵盖了在常见平台&#xff08;如 Linux&#xff09;上的安装和基础配置。 1. 安装 ClickHouse 在 Linux (Ubuntu/Debian) 上安装 在 U…