掌握这招,Python帮你快速整理文件!

news2024/9/20 18:44:26

更多资料获取

📚 个人网站:ipengtao.com


在日常工作中,经常需要处理大量的通知文件。这些文件可能以不同的格式和命名规则存在,需要花费大量时间和精力去整理和分类。Python作为一门功能强大的编程语言,可以自动化这一过程。本文将详细介绍如何使用Python批量整理通知文件,并包含具体的示例代码,帮助更高效地完成这一任务。

准备工作

在开始编写代码之前,需要准备以下内容:

  1. 安装Python(如果尚未安装)。
  2. 创建一个目录,存放需要整理的通知文件。
  3. 确定文件的命名规则和目标分类标准。

安装Python

可以从Python官网下载并安装最新版本的Python。

安装完成后,可以通过命令行输入 python --version 来验证安装是否成功。

创建工作目录

假设我们有一个目录 notifications,其中存放了需要整理的通知文件。

目录结构如下:

notifications/
    ├── notice_20230101.txt
    ├── notice_20230102.txt
    ├── report_20230101.docx
    ├── report_20230102.docx
    └── ...

确定命名规则和分类标准

假设文件命名规则为 type_date.extension,其中 type 表示文件类型,date 表示日期,extension 表示文件扩展名。

希望将文件按照类型和年份进行分类整理,例如:

notifications/
    ├── notices/
    │   ├── 2023/
    │   │   ├── notice_20230101.txt
    │   │   └── notice_20230102.txt
    │   └── 2024/
    └── reports/
        ├── 2023/
        │   ├── report_20230101.docx
        │   └── report_20230102.docx
        └── 2024/

使用Python整理通知文件

接下来,将使用Python脚本来实现上述分类整理的功能。

步骤一:导入必要的模块

首先,需要导入一些必要的Python模块,包括 osshutil

import os
import shutil
from datetime import datetime

步骤二:定义整理函数

接下来,定义一个函数 organize_files,用于整理文件。

def organize_files(source_dir):
    # 遍历源目录中的所有文件
    for filename in os.listdir(source_dir):
        # 构建文件的完整路径
        file_path = os.path.join(source_dir, filename)
        
        # 跳过目录
        if os.path.isdir(file_path):
            continue
        
        # 解析文件名,假设文件名格式为 type_date.extension
        try:
            file_type, date_str = filename.split('_')
            date_str, extension = date_str.split('.')
            date = datetime.strptime(date_str, '%Y%m%d')
        except ValueError:
            print(f"文件名格式错误,跳过: {filename}")
            continue
        
        # 构建目标目录路径
        target_dir = os.path.join(source_dir, file_type + 's', str(date.year))
        os.makedirs(target_dir, exist_ok=True)
        
        # 构建目标文件路径
        target_path = os.path.join(target_dir, filename)
        
        # 移动文件到目标目录
        shutil.move(file_path, target_path)
        print(f"已移动: {file_path} -> {target_path}")

在这个函数中,首先遍历源目录中的所有文件,并跳过目录。然后解析文件名,提取文件类型和日期。如果文件名格式错误,将跳过该文件。接下来,构建目标目录路径,并确保目标目录存在。最后,将文件移动到目标目录。

步骤三:执行整理函数

最后,编写主程序,执行整理函数。

if __name__ == "__main__":
    source_directory = "notifications"
    organize_files(source_directory)

将上述代码保存为 organize_notifications.py,然后在命令行中运行:

python organize_notifications.py

脚本将按照预定的规则整理通知文件,并输出每个文件的移动情况。

完整代码

以下是完整的Python脚本代码:

import os
import shutil
from datetime import datetime

def organize_files(source_dir):
    # 遍历源目录中的所有文件
    for filename in os.listdir(source_dir):
        # 构建文件的完整路径
        file_path = os.path.join(source_dir, filename)
        
        # 跳过目录
        if os.path.isdir(file_path):
            continue
        
        # 解析文件名,假设文件名格式为 type_date.extension
        try:
            file_type, date_str = filename.split('_')
            date_str, extension = date_str.split('.')
            date = datetime.strptime(date_str, '%Y%m%d')
        except ValueError:
            print(f"文件名格式错误,跳过: {filename}")
            continue
        
        # 构建目标目录路径
        target_dir = os.path.join(source_dir, file_type + 's', str(date.year))
        os.makedirs(target_dir, exist_ok=True)
        
        # 构建目标文件路径
        target_path = os.path.join(target_dir, filename)
        
        # 移动文件到目标目录
        shutil.move(file_path, target_path)
        print(f"已移动: {file_path} -> {target_path}")

if __name__ == "__main__":
    source_directory = "notifications"
    organize_files(source_directory)

扩展功能

脚本可以根据需要进行扩展。例如,可以添加日志记录功能,将文件移动记录保存到日志文件中,或添加错误处理机制,记录和处理错误文件。

添加日志记录

可以使用 logging 模块添加日志记录功能。

import logging

# 配置日志
logging.basicConfig(filename='organize_files.log', level=logging.INFO, 
                    format='%(asctime)s - %(levelname)s - %(message)s')

def organize_files(source_dir):
    # 遍历源目录中的所有文件
    for filename in os.listdir(source_dir):
        # 构建文件的完整路径
        file_path = os.path.join(source_dir, filename)
        
        # 跳过目录
        if os.path.isdir(file_path):
            continue
        
        # 解析文件名,假设文件名格式为 type_date.extension
        try:
            file_type, date_str = filename.split('_')
            date_str, extension = date_str.split('.')
            date = datetime.strptime(date_str, '%Y%m%d')
        except ValueError:
            logging.error(f"文件名格式错误,跳过: {filename}")
            continue
        
        # 构建目标目录路径
        target_dir = os.path.join(source_dir, file_type + 's', str(date.year))
        os.makedirs(target_dir, exist_ok=True)
        
        # 构建目标文件路径
        target_path = os.path.join(target_dir, filename)
        
        # 移动文件到目标目录
        shutil.move(file_path, target_path)
        logging.info(f"已移动: {file_path} -> {target_path}")

if __name__ == "__main__":
    source_directory = "notifications"
    organize_files(source_directory)

在这个扩展版本中,日志记录功能可以更好地追踪文件整理的过程,并在出现问题时提供有用的信息。

总结

本文详细介绍了如何使用Python批量整理通知文件,包括定义整理函数、解析文件名、创建目标目录并移动文件。通过具体的示例代码展示了如何高效地管理和整理文件,提升工作效率。还介绍了如何在脚本中添加日志记录功能,以便更好地追踪文件整理的过程。无论是处理日常工作中的大量文件,还是管理文件分类,本文提供的方法都能帮助节省时间和精力。掌握这些技巧,可以在日常工作中更加高效地处理文件整理任务。


Python学习路线

在这里插入图片描述

更多资料获取

📚 个人网站:ipengtao.com

如果还想要领取更多更丰富的资料,可以点击文章下方名片,回复【优质资料】,即可获取 全方位学习资料包。

在这里插入图片描述
点击文章下方链接卡片,回复【优质资料】,可直接领取资料大礼包。

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

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

相关文章

学习嵌入式入门(十)高级定时器简介及实验(下)

一、高级定时器互补输出带死区控制实验 上图中,CH1 输出黄色的 PWM,它的互补通道 CH1N 输出绿色的 PWM。通过对比,可以 知道这两个 PWM 刚好是反过来的,CH1 的 PWM 为高电平期间,CH1N 的 PWM 则是低电平, 反…

Linux下 vim的用法

目录 前言 一、初始Vim 二、使用Vim 1.1命令模式 2.1底行模式 3.1插入模式 前言 提示:这里可以添加本文要记录的大概内容: 本篇文章会介绍vim的基本用法和为什么我们要学习vim。 提示:以下是本篇文章正文内容,下面案例可供…

计算机网络——HTTP协议详解(上)

一、HTTP协议简单介绍 1.1 什么是HTTP协议 HTTP(超文本传输协议)是一种用于在Web浏览器和Web服务器之间传输数据的应用层协议。它是一种无状态协议,即服务器不会保留与客户端的任何连接状态信息,每个请求都被视为一个独立的事务。…

Echarts饼图7.0:图例自定义+取消高亮时放大的状态

1、源代码: let seriseData [{ value: 1048, name: Search Engine },{ value: 735, name: Direct } ] option {color: [#5D9AF1, #D6D6D6],tooltip: {trigger: item,backgroundColor: rgba(0,0,0,0.4),borderColor: transparent,formatter: (item) > {consol…

使用Arduino IDE生成带有bootloader的烧录文件

使用Arduino IDE生成bin(烧录)文件 1、在“项目”中,选择“导出已编译的二进制文件” 2、在工程目录中,会出现“build”文件夹 3、在build文件夹中,有hex文件,以及包含bootloader的bin和hex文件 bin和h…

ArkUI---Swiper、Grid、List组件简单介绍

前言:ForEach ForEach语法如下: ForEach(arr: Array,itemGenerator: (item: Array, index?: number) > void,keyGenerator?: (item: Array, index?: number) : string > string ) 参数1:数据源,为Array的数组 参数2&am…

【51单片机】让AI识别电路图,帮你进行编码(以51单片机为例)

让AI识别电路图,帮你进行编码(以51单片机为例) ​ 这里使用的AI大模型使用的是 Copilot。(两个前提:1. 科学上网、2. 有微软账号) 今天测试了一下Copilot识别图片的能力,能力还是可圈可点的。 首先准备一…

react-antive 項目報錯 [CXX1429] error when building with cmake using

react-antive 項目報錯 [CXX1429] error when building with cmake using修复 错误现场分析原因解决方案举一反三技巧引用参考(感谢作者提供思路) 错误现场 [CXX1429] error when building with cmake using /Users/sebastiangarcia/Desktop/work/flm/…

基于spring boot的校园商铺管理系统

TOC springboot188基于spring boot的校园商铺管理系统 第1章 绪论 1.1 研究背景 互联网概念的产生到如今的蓬勃发展,用了短短的几十年时间就风靡全球,使得全球各个行业都进行了互联网的改造升级,标志着互联网浪潮的来临。在这个新的时代&…

springboot颐养居家养老管理系统---附源码19707

摘 要 随着社会的快速发展和人口老龄化趋势的加剧,居家养老已成为越来越多老年人的选择。然而,传统的居家养老方式面临着诸多问题,如服务质量不稳定、信息不对称等。为了解决这些问题,提高居家养老的服务质量和效率,我…

[mysql] 一行变多行

数据表 CREATE TABLE table_main (ID char(36) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,zb_list_str text CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci ,kf_list_str text CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci,PRIMARY KEY (ID) USI…

在宝塔面板下安装WordPress

宝塔面板是服务器管理好助手,尤其在Linux系统下,提高了管理的可视化,降低了Linux服务器的使用门槛。 WordPress是个非常好的博客系统,由于支持海量主题模板、各种类型的插件,因此已经成为建设各类网站的首选框架。 今…

java 获取request中的json请求体

Java 获取request中的json请求体 简介 在Java开发中,有时我们需要从HTTP请求中获取JSON格式的数据。本文将详细介绍如何在Java中获取request中的json请求体。 流程概览 以下是获取request中的json请求体的整体流程: 步骤 描述 1 获取HttpServletReque…

代码规范 —— 并发编程规范

优质博文:IT-BLOG-CN 【1】【强制】获取单例对象需要保证线程安全,其中的方法也要保证线程安全。 说明: 资源驱动类、工具类、单例工厂类都需要注意。 【2】【强制】创建线程或线程池时请指定有意义的线程名称,方便出错时回溯。…

Adobe Illustrator 2023 for Mac/Win:创意设计的强大引擎

Adobe Illustrator 2023(简称AI 2023)是一款专为设计师打造的矢量图形编辑软件,无论是Mac还是Windows平台,它都以其卓越的性能和丰富的功能赢得了业界的广泛赞誉。这款软件在设计领域具有举足轻重的地位,为设计师们提供…

算法的学习笔记—删除链表中重复的结点(牛客JZ76)

😀前言 在链表操作中,删除重复节点是一个常见的问题。特别是在排序链表中,连续的重复节点不仅会影响链表的结构,还会带来额外的复杂度。本文将介绍一种高效的算法,用于删除链表中所有重复的节点,并保留链表…

GPT-4o mini发布,轻量级大模型如何颠覆AI的未来?

从巨无霸到小巨人:GPT-4o Mini的创新之路 ©作者|潇潇 来源|神州问学 引言 随着人工智能技术的飞速进步,AI领域的竞争日益激烈,大型模型的发布几乎成为常态。然而,这些庞大的模型通常需要大量的计算资源和存储空间&#xff…

如何使用Zabbix API批量修正主机名称

作者 乐维社区(forum.lwops.cn) 许远 先说为什么要修正? 这其实源自于Ansible安装zabbix agent的一个小Bug:有小伙伴发现,利用ansible批量安装zabbix agent后,zabbix系统上显示的主机名出错了,主…

疫苗发布和接种预约系统

TOC springboot173疫苗发布和接种预约系统 第一章 绪论** 1.1 研究背景 在现在社会,对于信息处理方面,是有很高的要求的,因为信息的产生是无时无刻的,并且信息产生的数量是呈几何形式的增加,而增加的信息如何存储以…

【Next】初识 Next

概述 在Reactr中创建SSR应用,需要调用 ReactDOM.hydrateRoot 函数,而不是 ReactDOM.createRoot。 createRoot:创建一个Root,接着调用其 render 函数将 App 直接加载到页面上hydrateRoot:创建水合 Root, 是在激活的模式下渲染 App 服务端可用 ReactDOM…