百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Python 办公自动化|自动整理文件,一键完成

off999 2024-10-01 13:55 22 浏览 0 评论



大家好,又到了 Python 办公自动化专题, 本文跟大家分享一个文件整理脚本的实现过程。

具体的功能很简单,给定一个打算整理的文件夹目录,这个脚本可以将该目录下的 所有文件 都揪出来,并且 根据后缀名归类到不同的文件夹 里,就像下图一样,简直是整理爱好者的福音

通过本例还可以学到: os 、 glob 、 shutil 三个标准库的综合运用

现在让我们一起来捋一捋实现的逻辑

首先是导入需要的依赖库

让我们愉快地开始吧~本文源代码获取私信小编“01“即可免费领取还可获取python资料!


import os
import shutil
import glob

os 库可以完成操作系统层面大量操作,例如文件夹的 创建、移动、重命名、删除 等,有些功能实现的不是很完美,就用到 shutil 库跟其互补了,例如文件的 复制、移动 等。 glob 库可以利用通配符进行 文件的搜索 获取,非常强大

# 设置建立分类总文件夹的路径,这里按自己的实际路径修改
mkdir_path = r'C:\Users\chenx\文件夹分类'
# 设置需要遍历整理的文件夹路径,可以依据自己的实际需求修改
goal_dir = r'C:\xxxxxxxx)'

if not os.path.exists(mkdir_path):
    os.mkdir(mkdir_path)

os.mkdir 可以在指定路径创建文件夹,但如果文件夹已经存在则会报错,因此谨慎一点可以利用 os.path.exists 先对文件夹的存在与否进行判断

接下来是代码核心循环,为了方便理解先简化成如下形式:

for file in glob.glob(f'{goal_dir}/**/*', recursive=True):
    if os.path.isfile(file):
        print(file)

glob.glob(f'{goal_dir}/**/*', recursive=True) 中 **/* 是 通配符的重要用法, * 可以代表任意个字符,包括 0 个字符, recursive 参数的设置确保遍历

由于需要 找出所有的文件而非文件夹 ,这里用 os.path.isfile 进行判断。

最后可以输出文件的绝对路径先看看代码有没出现错误,让我们继续往下写

for file in glob.glob(f'{goal_dir}/**/*', recursive=True):
    if os.path.isfile(file):
        filename = os.path.basename(file)
        if '.' in filename:
            suffix = filename.split('.')[-1]
        else:
            suffix = 'others'

这里发生了什么呢?

确认遍历到的是文件后,先用 os.path.basename 获取绝对路径中的文件名,接下来就是获取后缀名了

可以简单用 split 根据 . 将字符串 “劈开”,然后取最后一个元素就是后缀名了

需要注意的是,这里必须要考虑一个特殊情况:有些文件没有后缀名(文件类型就叫文件),且名字中也没有 . ,这时用字符串方法 split 就会报错。

如下图:

因此需要先判断文件中有没有 .

由于我们是利用后缀名建立文件夹,所以索性将文件名中没有 . 的 文件 类型统一分类到 others 文件夹了

这个实现逻辑大致上没有问题,但是依然忽略了一种极端情况: 有些文件没有后缀名,且文件名中有个 . ,哈哈哈哈这种就会被上面的实现逻辑拆解出错误的后缀名了; 更好的方法是有个函数可以直接获取文件的后缀名,利用这个对文件进行分类,感兴趣的读者可以自己尝试

接下来就可以 根据后缀名产生文件夹 了,这里依然要注意先判断文件夹是否已经产生

for file in glob.glob(f'{goal_dir}/**/*', recursive=True):
    if os.path.isfile(file):
        filename = os.path.basename(file)
        if '.' in filename:
            suffix = filename.split('.')[-1]
        else:
            suffix = 'others'
        if not os.path.exists(f'{mkdir_path}/{suffix}'):
            os.mkdir(f'{mkdir_path}/{suffix}')
        shutil.copy(file, f'{mkdir_path}/{suffix}')

为了避免移动文件夹而造成的异常,尤其是系统盘,因此这里用的是复制。按照需要也可以换成 shutil.move 最后我们可以加上分类文件夹和所有文件的计数并输出

完整代码如下:

import os
import shutil
import glob

mkdir_path = r'C:\Users\chenx\文件夹分类'
goal_dir = r'C:\xxxxxxxx'

if not os.path.exists(mkdir_path):
    os.mkdir(mkdir_path)

file_num = 0
dir_num = 0

for file in glob.glob(f'{goal_dir}/**/*', recursive=True):
    if os.path.isfile(file):
        filename = os.path.basename(file)
        if '.' in filename:
            suffix = filename.split('.')[-1]
        else:
            suffix = 'others'
        if not os.path.exists(f'{mkdir_path}/{suffix}'):
            os.mkdir(f'{mkdir_path}/{suffix}')
            dir_num += 1
        shutil.copy(file, f'{mkdir_path}/{suffix}')
        file_num += 1

print(f'整理完成,有{file_num}个文件分类到了{dir_num}个文件夹中')

相关推荐

apisix动态修改路由的原理_动态路由协议rip的配置

ApacheAPISIX能够实现动态修改路由(DynamicRouting)的核心原理,是它将传统的静态Nginx配置彻底解耦,通过中心化配置存储(如etcd)+OpenRest...

使用 Docker 部署 OpenResty Manager 搭建可视化反向代理系统

在之前的文章中,xiaoz推荐过可视化Nginx反向代理工具NginxProxyManager,最近xiaoz还发现一款功能更加强大,界面更加漂亮的OpenRestyManager,完全可以替代...

OpenResty 入门指南:从基础到动态路由实战

一、引言1.1OpenResty简介OpenResty是一款基于Nginx的高性能Web平台,通过集成Lua脚本和丰富的模块,将Nginx从静态反向代理转变为可动态编程的应用平台...

OpenResty 的 Lua 动态能力_openresty 动态upstream

OpenResty的Lua动态能力是其最核心的优势,它将LuaJIT嵌入到Nginx的每一个请求处理阶段,使得开发者可以用Lua脚本动态控制请求的生命周期,而无需重新编译或rel...

LVS和Nginx_lvs和nginx的区别

LVS(LinuxVirtualServer)和Nginx都是常用的负载均衡解决方案,广泛应用于大型网站和分布式系统中,以提高系统的性能、可用性和可扩展性。一、基本概念1.LVS(Linux...

外网连接到内网服务器需要端口映射吗,如何操作?

外网访问内网服务器通常需要端口映射(或内网穿透),这是跨越公网与私网边界的关键技术。操作方式取决于网络环境,以下分场景详解。一、端口映射的核心原理内网服务器位于私有IP地址段(如192.168.x.x...

Nginx如何解决C10K问题(1万个并发连接)?

关注△mikechen△,十余年BAT架构经验倾囊相授!大家好,我是mikechen。Nginx是大型架构的必备中间件,下面我就全面来详解NginxC10k问题@mikechen文章来源:mikec...

炸场!Spring Boot 9 大内置过滤器实战手册:从坑到神

炸场!SpringBoot9大内置过滤器实战手册:从坑到神在Java开发圈摸爬滚打十年,见过太多团队重复造轮子——明明SpringBoot自带的过滤器就能解决的问题,偏偏要手写几十...

WordPress和Typecho xmlrpc漏洞_wordpress主题漏洞

一般大家都关注WordPress,毕竟用户量巨大,而国内的Typecho作为轻量级的博客系统就关注的人并不多。Typecho有很多借鉴WordPress的,包括兼容的xmlrpc接口,而WordPre...

Linux Shell 入门教程(六):重定向、管道与命令替换

在前几篇中,我们学习了函数、流程控制等Shell编程的基础内容。现在我们来探索更高级的功能:如何控制数据流向、将命令链接在一起、让命令间通信变得可能。一、输入输出重定向(>、>>...

Nginx的location匹配规则,90%的人都没完全搞懂,一张图让你秒懂

刚配完nginx网站就崩了?运维和开发都头疼的location匹配规则优先级,弄错顺序直接导致500错误。核心在于nginx处理location时顺序严格:先精确匹配=,然后前缀匹配^~,接着按顺序正...

liunx服务器查看故障命令有那些?_linux查看服务器性能命令

在Linux服务器上排查故障时,需要使用一系列命令来检查系统状态、日志文件、资源利用情况以及网络状况。以下是常用的故障排查命令,按照不同场景分类说明。1.系统资源相关命令1.1查看CPU使...

服务器被入侵的常见迹象有哪些?_服务器入侵可以被完全操纵吗

服务器被入侵可能会导致数据泄露、服务异常或完全失控。及时发现入侵迹象能够帮助你尽早采取措施,减少损失。以下是服务器被入侵的常见迹象以及相关的分析与处理建议。1.服务器被入侵的常见迹象1.1系统性能...

前端错误可观测最佳实践_前端错误提示

场景解析对于前端项目,生产环境的代码通常经过压缩、混淆和打包处理,当代码在运行过程中产生错误时,通常难以还原原始代码从而定位问题,对于深度混淆尤其如此,因此Mozilla自2011年开始发起并...

8个能让你的Kubernetes集群“瞬间崩溃”的配置错误

错误一:livenessProbe探针“自杀式”配置——30秒内让Pod重启20次现象:Pod状态在Running→Terminating→CrashLoopBackOff之间循环,重启间隔仅...

取消回复欢迎 发表评论: