当前位置: 首页 > news >正文

【办公类-04-04】华为助手导出照片视频分类(根据图片、视频的文件名日期导入“年-月-日”文件夹中,并转移到“年-月”文件中整理、转移到“年”文件夹中整理)

背景需求

最近带班,没有时间整理照片,偶尔导一次,几个月的照片。发现用电脑版“华为手机助手“中的WLAN连接”与华为手机的“华为手机助手”连接,速度更快、更稳定,不会出现数据线连接时碰碰就断网的问题

1、先打开电脑版--WLAN网络连接

2、点击手机版

2、手机屏幕出现8个数字密码(不让截图)

3、电脑版上输入8个数字,连接

4、点击电脑版-华为助手-图片

出现“去手机上操作”提示,

5、点击允许

6、出现锁屏密码(无法截图)-输入自己的6位锁屏密码

7、可以使用

8、选择图片

9、全选图片-导出

10、我的图片导出到D盘

用原来写的照片分类代码把照片按照年月日分类

【办公类-04-03】华为助手导出照片视频分类(根据图片、视频的文件名日期分类导出)_华为手机照片导出按日期存放提取-CSDN博客文章浏览阅读1.2k次,点赞33次,收藏8次。【办公类-04-03】华为助手导出照片视频分类(根据图片、视频的文件名日期分类导出)_华为手机照片导出按日期存放提取https://blog.csdn.net/reasonsummer/article/details/139716209

结果出现了所有照片按照日期排列的日期照片文件夹

但是我需要手动新建两个月份文件夹,

选择所有的9月X日文件夹,剪切,

打开2024年9月文件,把刚才的内容黏贴进去。

我觉得有点烦,在分类年月日的基础上,可以直接按照文件夹的年月,将年月日文件剪切到年月文件里。

经过无数次的代码测试,终于实现了这个目标

思路:

1、读取2024-10-30文件夹中的2024和10,新建2024年10月文件夹

2、把整个“2024-10-30”文件夹剪切到2024年10月文件内

3、因为一天的照片不一定同时拍好,可能会分两三次整理,所以当2024年10月文件里已经有“2024-10-30”文件夹时,需要将新的“2024-10-30”文件内容内容替换条之前的“2024-10-30”文件夹里面的内容(重复照片被替换。)

'''
1、华为手机助手导出的照片,根据照片、视频的文件名中的日期,提取日期,转移到日期文件夹中
2、将日期文件夹复制到“”年月”文件夹内
IMG_20240428_085357.jpg
VID_20240603_131241.mp4
如果文件已存在,就替换它
作者:文心一言,阿夏
时间:2024年10月31日
'''import os
import re
from datetime import datetime
import shutilfolder_path = r'D:\03照片导出'
new_folder = r'D:\04照片整理2'
os.makedirs(new_folder, exist_ok=True)file_names = os.listdir(folder_path)for file_name in file_names:split_name = re.split("_", file_name)if len(split_name[1]) == 8:date_obj = datetime.strptime(split_name[1], "%Y%m%d")new_folder_name = date_obj.strftime("%Y-%m-%d")print(new_folder_name)new_folder_path = os.path.join(new_folder, new_folder_name)os.makedirs(new_folder_path, exist_ok=True)target_path = os.path.join(new_folder_path, file_name)shutil.move(os.path.join(folder_path, file_name), target_path)elif len(split_name[1]) == 3:date_obj = datetime.strptime(split_name[2][:8], "%Y%m%d")new_folder_name = date_obj.strftime("%Y-%m-%d")print(new_folder_name)new_folder_path = os.path.join(new_folder, new_folder_name)os.makedirs(new_folder_path, exist_ok=True)target_path = os.path.join(new_folder_path, file_name)shutil.move(os.path.join(folder_path, file_name), target_path)else:passimport os
import shutil# 设置源文件夹路径  
source_folder = r'D:\04照片整理2'  # 遍历源文件夹下的所有子文件夹  
for folder in os.listdir(source_folder):  folder_path = os.path.join(source_folder, folder)  # 检查是否是文件夹并且长度是10  if os.path.isdir(folder_path) and len(folder) == 10:  # 提取年、月、日  year = folder[0:4]  month = str(folder[5:7])  day = folder[8:10]  # 创建目标文件夹路径  target_folder = os.path.join(source_folder, f'{year}年{month}月')  # 检查目标文件夹是否存在  if not os.path.exists(target_folder):  os.makedirs(target_folder)  # 如果目标文件夹不存在,直接移动整个文件夹  shutil.move(folder_path, target_folder)  print(f'Moved {folder} to {target_folder}')  else:  # 如果目标文件夹存在,合并文件夹内容  target_subfolder = os.path.join(target_folder, folder)  # 尝试创建同名子文件夹路径  if not os.path.exists(target_subfolder):  os.makedirs(target_subfolder)  # 如果不存在,则创建  # 遍历源文件夹中的所有文件,并复制到目标子文件夹中  for root, dirs, files in os.walk(folder_path):  for file in files:  src_file = os.path.join(root, file)  dst_file = os.path.join(target_subfolder, file)  # 复制文件,如果文件已存在,可以选择覆盖(shutil.copy2)或跳过(使用异常处理)  try:  shutil.copy2(src_file, dst_file)  # 使用shutil.copy2保留元数据  except FileExistsError:  print(f'Skipped {file} (already exists in {target_subfolder})')  # 可选:如果源文件夹中还有子文件夹,可以递归处理它们  # 但在这个特定案例中,我们假设文件夹结构是平的,即没有嵌套子文件夹  # 删除空的源文件夹(如果所有文件都已复制)  shutil.rmtree(folder_path)  # 注意:这只有在确认所有文件都已正确复制后才安全执行  print(f'Merged {folder} into {target_subfolder}')

转移流程:

1、导出的照片(9月和10月)

2、代码运行

最后只留下“年月”总文件夹

2024年9月里面有2个文件夹(测试用,所以都只有1张)

2024年10月里面有5个文件夹(测试用,所以只下了5天照片)

这样就能实现“JPG→《年月日》文件夹→《年月》文件夹”,能快速整理照片文件夹到“年月”里。

为了更快捷,我又做了一个“2024年”的一级文件夹,进一步提高整理的速度效率

整理到“年”

'''
1、华为手机助手导出的照片,根据照片、视频的文件名中的日期,提取日期,转移到日期文件夹中
2、将日期文件夹复制到“年-年月-年月日”文件夹内
IMG_20240428_085357.jpg
VID_20240603_131241.mp4
如果文件已存在,就替换它
作者:文心一言,阿夏
时间:2024年10月31日
'''import os
import re
from datetime import datetime
import shutilfolder_path = r'D:\03照片导出'
new_folder = r'D:\04照片整理2'
os.makedirs(new_folder, exist_ok=True)file_names = os.listdir(folder_path)for file_name in file_names:split_name = re.split("_", file_name)if len(split_name[1]) == 8:date_obj = datetime.strptime(split_name[1], "%Y%m%d")new_folder_name = date_obj.strftime("%Y-%m-%d")print(new_folder_name)new_folder_path = os.path.join(new_folder, new_folder_name)os.makedirs(new_folder_path, exist_ok=True)target_path = os.path.join(new_folder_path, file_name)shutil.move(os.path.join(folder_path, file_name), target_path)elif len(split_name[1]) == 3:date_obj = datetime.strptime(split_name[2][:8], "%Y%m%d")new_folder_name = date_obj.strftime("%Y-%m-%d")print(new_folder_name)new_folder_path = os.path.join(new_folder, new_folder_name)os.makedirs(new_folder_path, exist_ok=True)target_path = os.path.join(new_folder_path, file_name)shutil.move(os.path.join(folder_path, file_name), target_path)else:passimport os
import shutil# 设置源文件夹路径  
source_folder =new_folder 
new= new_folder +r'\2024年'  
os.makedirs(new,exist_ok=True)# 遍历源文件夹下的所有子文件夹  
for folder in os.listdir(source_folder):  folder_path = os.path.join(source_folder, folder)  # 检查是否是文件夹并且长度是10  if os.path.isdir(folder_path) and len(folder) == 10:  # 提取年、月、日  year = folder[0:4]  month = str(folder[5:7])  day = folder[8:10]  # 创建目标文件夹路径  target_folder = os.path.join(new, f'{year}年{month}月')  # 检查目标文件夹是否存在  if not os.path.exists(target_folder):  os.makedirs(target_folder)  # 如果目标文件夹不存在,直接移动整个文件夹  shutil.move(folder_path, target_folder)  print(f'Moved {folder} to {target_folder}')  else:  # 如果目标文件夹存在,合并文件夹内容  target_subfolder = os.path.join(target_folder, folder)  # 尝试创建同名子文件夹路径  if not os.path.exists(target_subfolder):  os.makedirs(target_subfolder)  # 如果不存在,则创建  # 遍历源文件夹中的所有文件,并复制到目标子文件夹中  for root, dirs, files in os.walk(folder_path):  for file in files:  src_file = os.path.join(root, file)  dst_file = os.path.join(target_subfolder, file)  # 复制文件,如果文件已存在,可以选择覆盖(shutil.copy2)或跳过(使用异常处理)  try:  shutil.copy2(src_file, dst_file)  # 使用shutil.copy2保留元数据  except FileExistsError:  print(f'Skipped {file} (already exists in {target_subfolder})')  # 可选:如果源文件夹中还有子文件夹,可以递归处理它们  # 但在这个特定案例中,我们假设文件夹结构是平的,即没有嵌套子文件夹  # 删除空的源文件夹(如果所有文件都已复制)  shutil.rmtree(folder_path)  # 注意:这只有在确认所有文件都已正确复制后才安全执行  print(f'Merged {folder} into {target_subfolder}')

不过这下所有的“年月日”文件夹都进入“2024年”里,。

OK,Python实现了我日常整理照片的全部需求!!!

在单位电脑上也试验了一下

单位电脑里,已经有“2024年”和2024年10月”的文件夹

先把“年月日”文件夹生成

文件夹开始转移到“2024年2”“2024年10月”里面

最后所有的“年月日”都不见了,转移到“年月”里面去了

这是今天的导入的

这是今天当天的文件夹

完美!

相关文章:

【办公类-04-04】华为助手导出照片视频分类(根据图片、视频的文件名日期导入“年-月-日”文件夹中,并转移到“年-月”文件中整理、转移到“年”文件夹中整理)

背景需求 最近带班,没有时间整理照片,偶尔导一次,几个月的照片。发现用电脑版“华为手机助手“中的WLAN连接”与华为手机的“华为手机助手”连接,速度更快、更稳定,不会出现数据线连接时碰碰就断网的问题 1、先打开电…...

62-Java-面试专题(1)__基础

62-Java-面试专题(1)__基础-- 笔记 笔记内容来源与黑马程序员教学视频 文章目录 62-Java-面试专题(1)__基础-- 笔记Java-面试专题(1)笔记中涉及资源: 一、二分查找①:代码实现1. 流程2. 代码实现3. 测试 ②:解决整数溢出(方法一&…...

快速构建数据产品原型 —— 我用 VChart Figma 插件

快速构建数据产品原型 —— 我用 VChart Figma 插件 10 种图表类型、24 种内置模板类型、丰富的图表样式配置、自动生成图表实现代码。VChart Figma 插件的目标是提供 便捷好用 & 功能丰富 & 开发友好 的 figma 图表创建能力。目前 VChart 插件功能仍在持续更新中&…...

登录—令牌技术

这里写目录标题 令牌技术2.4.1 JWT令牌2.4.2 jwt使用 令牌技术 令牌,其实它就是一个用户身份的标识,其实本质就是一个字符串。 如果通过令牌技术来跟踪会话,就可以在浏览器发起请求。在请求登录接口的时候,如果登录成功&#xff…...

NPOI 操作详解(操作Excel)

目录 1. 安装 NPOI 2. 使用 NPOI 创建新 Excel 文件 3. 设置列宽和行高 1. 设置列宽 2. 设置行高 3. 同时设置列宽和行高 4. 设置统一的行高 5. 设置统一的列宽 6. 应用统一的行高和列宽 4. 合并单元格 5. 设置单元格样式(字体、边框、背景色等&#xf…...

2024年北京海淀区中小学生信息学竞赛校级预选赛试题

2024年北京海淀区中小学生信息学竞赛校级预选赛试题 题目总数:24 总分数:100 编程基础知识单选题 第 1 题 单选题 关于 2024年海淀区信息学竞赛的描述错误的是( ) A.报名在网上报名系统进行 B.必须经过学籍所在学校的指导教师审核 C.学校…...

GPT-SoVITS 部署方案

简介 当前主流的开源TTS框架,这里介绍部署该服务的主要流程和我在使用过程中出现的问题。 使用的技术 Docker、Jupyter、Python、C# 部署 docker的使用 拉取命令 docker pull jupyter/base-notebook:python-3.10.11jupyter的访问 docker运行以后可以直接使用…...

pdf添加目录标签python(手动配置)

先安装对应的库: pip install pypdf 代码分为两个部分,一部分是config.py,代码如下: offset=10 catgorys=[("第一章",12),("第二章",45), ] 需要自己手动更改offset,和目录列表 下面是主要代码: import pypdf # import sys from config import…...

Ngrok 在树莓派上的配置与使用教程

Ngrok 是一个便捷的工具,用于将本地服务器暴露到互联网上,常用于开发和调试。 1. 更新树莓派 首先,更新树莓派的系统: sudo apt update sudo apt upgrade -y2. 安装 Ngrok (1)下载 Ngrok: 访…...

多核架构的基本概念

目录 1.为什么使用多核 2.多核分类 2.1 同构和异构 2.2 SMP和AMP 3 小结 1.为什么使用多核 这个问题个人认为可以从两个方面来看: 性能问题 随着汽车ECU对集成化的要求越来越高,把多个ECU功能集中到一个多核MCU的需求也越来越明显。 以汽车制动…...

yolov8模型推理测试代码(pt/onnx)

🦖yolov8训练出来的模型,不使用detect.py代码进行模型测试🦖 pt格式模型测试 import cv2 import os from ultralytics import YOLO # 定义输入和输出文件夹路径 input_folder /input/folder # 输入文件夹 output_folder /output/folder …...

二叉树 最大深度(递归)

给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:3示例 2: 输入:root [1,null,2] 输出…...

C++详细笔记(五)

1.类和对象 1.1运算符重载(补) 1.运算符重载中,参数顺序和操作数顺序是一致的。 2.一般成员函数重载为成员函数,输入流和输出流重载为全局函数。 3.由1和2只正常的成员函数默认第一个参数为this指针而重载中参数顺序和操作数顺…...

简易CPU设计入门:译码模块(一)

项目代码下载 还是请大家首先准备好本项目所用的源代码。如果已经下载了,那就不用重复下载了。如果还没有下载,那么,请大家点击下方链接,来了解下载本项目的CPU源代码的方法。 下载本项目代码 准备好了项目源代码以后&#xff…...

力扣题目解析--三数之和

题目 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示…...

qt QTabWidget详解

1、概述 QTabWidget是Qt框架中的一个控件,它提供了一个标签页式的界面,允许用户在不同的页面(或称为标签)之间切换。每个页面都可以包含不同的内容,如文本、图像、按钮或其他小部件。QTabWidget非常适合用于创建具有多…...

linux shell脚本学习(1):shell脚本基本概念与操作

1.什么是shell脚本 linux系统中,shell脚本或称之为bash shell程序,通常是由vim编辑,由linux命令、bash shell指令、逻辑控制语句、注释信息组成的可执行文件 *linux中常以.sh后缀作为shell脚本的后缀。linux系统中文件乃至脚本的后缀并没有…...

Savitzky-Golay(SG)滤波器

Savitzky-Golay(SG)滤波器是一种在时域内基于局域多项式最小二乘法拟合的滤波方法,它最初由Savitzky A和Golay M于1964年提出,并广泛应用于数据流平滑除噪。 基本介绍 一、基本原理 SG滤波器通过在滑动窗口内拟合多项式来平滑数…...

Webserver(2.7)共享内存

目录 共享内存共享内存实现进程通信 共享内存 共享内存比内存映射效率更高&#xff0c;因为内存映射关联了一个文件 共享内存实现进程通信 write.c #include <stdio.h> #include <sys/ipc.h> #include <sys/shm.h> #include <string.h>int main(){…...

【网安案例学习】凭证填充Credential Stuffing

### 凭证填充的深入讨论 凭证填充&#xff08;Credential Stuffing&#xff09;是一种网络攻击技术&#xff0c;攻击者利用从数据泄露中获取的大量用户名和密码组合&#xff0c;尝试在其他网站和服务上进行自动化登录。这种攻击依赖于用户在多个网站上重复使用相同密码的习惯。…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...