【Python实用技巧】OS模块详解:文件与目录操作的瑞士军刀
大家好,我是唐叔!今天咱们来聊聊Python中那个被低估的"老黄牛"——os模块。这个模块看似简单,但却是每个Python开发者都绕不开的利器。就像我常说的:“不会用os模块的Python程序员,就像不会用筷子的美食家”。
文章目录
- 一、OS模块是什么?
- 二、为什么需要OS模块?
- 三、os模块常见操作详解
- 1. 文件和目录操作
- 2. 路径操作
- 3. 文件信息查询
- 4. 目录遍历
- 四、实战案例:批量重命名工具
- 五、总结与思考
一、OS模块是什么?
OS模块(Operating System的缩写)是Python标准库中与操作系统交互的接口。它就像是Python和操作系统之间的翻译官,让我们能够用Python代码执行各种系统级操作。
主要功能包括:
- 文件和目录操作
- 路径管理
- 环境变量访问
- 进程管理
- 执行系统命令
二、为什么需要OS模块?
想象一下这个场景:你需要批量处理某个目录下的所有文件,或者在不同操作系统中保证代码的兼容性。这时候,os模块就是你的最佳搭档。它最大的优势在于:
- 跨平台:自动处理不同操作系统(Windows/Linux/Mac)的差异
- 功能全面:覆盖了大部分系统级操作需求
- 简单易用:API设计直观,学习成本低
三、os模块常见操作详解
1. 文件和目录操作
import os# 创建目录(如果已存在会报错)
os.mkdir('test_dir')# 递归创建多级目录(更安全)
os.makedirs('parent_dir/child_dir', exist_ok=True)# 删除文件
os.remove('old_file.txt')# 删除空目录
os.rmdir('empty_dir')# 递归删除目录及其内容(危险!慎用)
import shutil
shutil.rmtree('directory_to_delete')
使用场景:批量文件处理、临时目录管理、项目初始化时创建目录结构等。
2. 路径操作
# 获取当前工作目录
current_dir = os.getcwd()
print(f"当前目录:{current_dir}")# 路径拼接(推荐这种方式,跨平台兼容)
file_path = os.path.join('data', 'subfolder', 'file.txt')# 获取绝对路径
abs_path = os.path.abspath('some_file.txt')# 路径拆分
dirname, filename = os.path.split('/path/to/file.txt')
basename, ext = os.path.splitext(filename)# 检查路径是否存在
if os.path.exists('some_path'):print("路径存在")
使用场景:项目中的文件路径管理、动态构建文件路径、路径验证等。
3. 文件信息查询
# 获取文件大小(字节)
size = os.path.getsize('data.txt')# 获取文件最后修改时间(时间戳)
mtime = os.path.getmtime('data.txt')
from datetime import datetime
print(datetime.fromtimestamp(mtime))# 判断是否是文件/目录
is_file = os.path.isfile('data.txt')
is_dir = os.path.isdir('some_dir')
使用场景:文件监控、日志分析、文件系统扫描等。
4. 目录遍历
# 列出目录内容
items = os.listdir('.') # 当前目录# 递归遍历目录(生成器)
for root, dirs, files in os.walk('project'):print(f"当前目录:{root}")print(f"子目录:{dirs}")print(f"文件:{files}")
使用场景:批量处理文件、项目文件统计、查找特定文件等。
四、实战案例:批量重命名工具
下面唐叔将通过实现一个实用的批量重命名工具来加深大家对os模块下理解,这个案例综合运用了多个os操作:
import osdef batch_rename(folder_path, prefix, start_num=1):"""批量重命名文件夹中的文件:param folder_path: 目标文件夹路径:param prefix: 新文件名前缀:param start_num: 起始编号"""# 确保目录存在if not os.path.isdir(folder_path):print(f"错误:目录 {folder_path} 不存在")return# 遍历目录中的文件for i, filename in enumerate(os.listdir(folder_path), start=start_num):# 获取文件完整路径old_path = os.path.join(folder_path, filename)# 跳过目录if os.path.isdir(old_path):continue# 拆分文件名和扩展名_, ext = os.path.splitext(filename)# 构建新文件名new_name = f"{prefix}_{i}{ext}"new_path = os.path.join(folder_path, new_name)# 重命名os.rename(old_path, new_path)print(f"重命名:{filename} -> {new_name}")# 使用示例
batch_rename('./photos', 'vacation', 1)
功能说明:
- 将指定目录下的所有文件按顺序重命名
- 新文件名格式为:前缀_序号.扩展名
- 自动跳过子目录
- 提供起始序号参数
应用场景:
- 整理照片库
- 批量处理下载文件
- 标准化项目资源文件命名
五、总结与思考
os模块就像Python程序员的"瑞士军刀",虽然看起来简单,但在实际开发中几乎无处不在。记住唐叔的几点建议:
- 路径操作永远使用os.path:不要自己拼接路径字符串,跨平台兼容性会让你头疼
- 操作前先检查:特别是删除操作,先检查路径是否存在
- 考虑异常处理:文件操作容易出错,记得添加try-except
- 善用os.walk:目录递归遍历的神器
我是唐叔,我们下期再见!记得点赞收藏,你的支持是我创作的最大动力!
相关文章:
【Python实用技巧】OS模块详解:文件与目录操作的瑞士军刀
大家好,我是唐叔!今天咱们来聊聊Python中那个被低估的"老黄牛"——os模块。这个模块看似简单,但却是每个Python开发者都绕不开的利器。就像我常说的:“不会用os模块的Python程序员,就像不会用筷子的美食家”…...
动态内存分配与内存对齐
在C语言及其他低级编程语言中,内存管理是一个至关重要的主题。动态内存分配和内存对齐是确保程序高效和稳定运行的关键因素。本文将深入探讨动态内存分配的原理,内存对齐的概念,并解释它们如何共同影响程序的性能和资源利用。 一、动态内存分配简介 1.1 动态内存分配的概念…...
C 标准库 – 头文件
1️⃣ <fenv.h> 简介 <fenv.h> 提供了用于控制和检查浮点运算行为的宏和函数。它为浮点环境提供了精细的控制,允许设置舍入模式、捕获浮点异常等。通过 <fenv.h>,程序员可以: 控制浮点舍入模式,指定不同的舍入…...
Redis的基础,经典,高级问题解答篇
目录 一,基础 二,经典 缓存雪崩: 1. Redis事务的原子性 2. 与MySQL事务的区别 1. 主从复制原理 2. 哨兵模式故障转移流程 3. 客户端感知故障转移 三,高级 一,基础 Redis的5种基础数据类型及使用场景…...
uniapp uni-swipe-action滑动内容排版改造
在uniapp开发中 默认的uni-swipe-action滑动组件 按钮里的文字都是横排的 不能换行的 如果是在一些小屏设备 比如PDA这种,同时按钮文字又都是4个字 多按钮的情况 就会发现滑动一下都直接满屏了 观看体验都不好 但默认的官方组件又没有样式的设置,下面就告…...
电脑卡怎么办?提升电脑流畅的方法
电脑已经成为我们工作、学习和娱乐不可或缺的伙伴。然而,随着使用时间的增长,许多用户会遇到电脑运行变慢、卡顿的情况,这不仅影响了工作效率,也大大降低了使用体验。本文将为大家分析电脑卡顿的常见原因,并提供一套实…...
SpringBoot报错解决方案
org.apache.tomcat.util.http.fileupload.impl.SizeLimitExceededException: the request was rejected because its size (31297934) exceeds the configured maximum (10485760) 文件上传大小超过限制...
知识表示方法之二:产生式表示法(Production System)
有关知识表示方法之一:一阶谓词逻辑的内容可以看我的文章:https://blog.csdn.net/lzm12278828/article/details/146541478 一、定义 “产生式”这一术语是有美国数学家博斯特(E.Post)在1943年首先提出来的,他根据串替代规则提出了一种称为波斯特机的计算模型,模型中的每…...
SQL Server中账号权限
目录标题 查看现有权限授予权限拒绝权限撤销权限角色管理 在SQL Server中管理账号权限主要通过以下几个关键步骤: 查看现有权限 可以使用系统视图来查看账号的权限,比如 sys.database_permissions 视图,示例查询如下: SELECT d…...
软件需求未明确非功能性指标(如并发量)的后果
软件需求未明确非功能性指标(如并发量)可能带来的严重后果包括:系统性能下降、用户体验恶化、稳定性降低、安全风险增加、后期维护成本高企。其中,系统性能下降尤为显著。当软件系统在设计和开发阶段未明确并发量需求时࿰…...
VScode-i18n-ally-Vue
参考这篇文章,做Vue项目的国际化配置,本篇文章主要解释,下载了i18n之后,该如何对Vscode进行配置 https://juejin.cn/post/7271964525998309428 i18n Ally全局配置项 Vscode中安装i18n Ally插件,并设置其配置项&#…...
Spring Boot项目快速创建-开发流程(笔记)
主要流程: 前端发送网络请求->controller->调用service->操纵mapper->操作数据库->对entity数据对象赋值->返回前端 前期准备: maven、mysql下载好 跟学视频,感谢老师: https://www.bilibili.com/video/BV1gm4…...
车架号查询车牌号接口如何用Java对接
一、什么是车架号查询车牌号接口? 车架号查询车牌号接口,即传入车架号,返回车牌号、车型编码、初次登记日期信息。车架号又称车辆VIN码,车辆识别码。 二、如何用Java对接该接口? 下面我们以阿里云接口为例࿰…...
npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本的处理方法
1、安装了node.js后,windows powershell中直接输入npm,然后就报错 2、出现原因:权限不够 系统禁用了脚本的执行,所以我们在windows powershell输入npm -v的时候,就会报上面的错误。 3、解决 Set-ExecutionPolicy Un…...
【java笔记】泛型、包装类、自动装箱拆箱与缓存机制
一、泛型:类型安全的基石 1. 泛型的本质与原理 Java 泛型(Generics)是 JDK 5 引入的特性,通过类型参数化实现代码的通用性。泛型类、接口和方法允许在定义时声明类型参数(如 T、E、K、V),这些…...
数仓开发那些事(11)
某神州优秀员工:一闪,领导说要给我涨米。 一闪:。。。。(着急的团团转) 老运维:Oi,两个吊毛,看看你们的hadoop集群,健康度30分,怎么还在抽思谋克?…...
自动化测试【Python3.7+Selenium3】
1、自动化测试环境搭建之selenium3安装 方法1:cmd环境下,用pip install selenium (速度很慢,不推荐) 方法2:下载selenium安装包手动安装 下载地址:https://pypi.org/project/selenium/ 在解压…...
从零开始完成冒泡排序(0基础)——C语言版
文章目录 前言一、冒泡排序的基本思想二、冒泡排序的执行过程(一)第一轮排序(二)第二轮排序(三)第三轮排序(四)第四轮排序 三、冒泡排序的代码实现(C语言)&am…...
工业级POE交换机:助力智能化与自动化发展
随着工业互联网、物联网(IoT)和自动化技术的快速发展,网络设备在工业领域的应用日益广泛。然而,在严苛环境下,传统网络设备往往难以应对复杂的温湿度变化、电磁干扰和供电不稳定等挑战。为同时满足数据传输与供电一体化…...
使用ZYNQ芯片和LVGL框架实现用户高刷新UI设计系列教程(第五讲)
在上一讲我们讲解了按键回调函数的自定义函数的用法,这一讲继续讲解回调函数的另一种用法。 首先我们将上一讲做好的按键名称以及自定义回调事件中的按键名称修改,改为默认模式为“open”当点击按键时进入回调函数将按键名称改为“close”,具…...
Burp Suite Professional 2024版本安装激活指南
文章目录 burpsuite简介Burp Suite的主要组件:Burp Suite的版本使用场景 下载地址使用教程 burpsuite简介 Burp Suite 是一个广泛使用的网络安全测试工具,特别是在Web应用程序安全领域。它主要用于发现和修复Web应用中的安全漏洞,特别适用于渗…...
【c++深入系列】:类与对象详解(上)
🔥 本文专栏:c 🌸作者主页:努力努力再努力wz 💪 今日博客励志语录: 你仰望的星辰并非遥不可及,而是跋涉者脚印的倒影;你向往的远方未必需要翅膀,只要脚下始终有路&#x…...
6、进程理论和简单进程创建
一、了解进程推荐看这个视频,很详细 1、概念 进程(Process)程序的运行过程,是系统进行资源分配和调度的独立单元程序的运行过程:多个不同程序 并发,同一个程序同时执行多个任务。 就需要很多资源来实现这个过程。 每个进程都有一…...
java八股文之JVM
1.什么是程序计数器 程序计数器是 JVM 管理线程执行的“定位器”,记录每个线程当前执行的指令位置,确保程序流程的连续性和线程切换的准确性。线程私有的,每个线程一份,内部保存的字节码的行号。用于记录正在执行的字节码指令的地…...
Todesk介绍
文章目录 ToDesk 软件介绍1. 软件概述2. ToDesk 的功能特点2.1 简单易用2.2 高质量的图像与流畅的操作2.3 跨平台支持2.4 多屏显示与协作2.5 文件传输功能2.6 实时聊天与语音通话2.7 远程唤醒与自动启动2.8 多种权限设置与安全性2.9 无需公网 IP 3. ToDesk 的应用场景3.1 个人使…...
每日总结3.27
蓝桥刷题 1. 团建 (树dfs) #include <bits/stdc.h> using namespace std; const int N200005; int a[N],b[N]; int ans; map<int,vector<int>>m1,m2; void dfs(int x,int y,int count) { if(a[x]!b[y]) {return;} ansmax(ans,c…...
Linux 进程3-fork创建子进程继承父进程缓冲区验证
目录 1. fork创建子进程继承父进程缓冲区验证 1.1 write向标准输出(终端屏幕)写入数据验证 1.1.1 write函数写入数据不带行缓冲刷新 \n 1.1.2 write函数写入数据带行缓冲刷新 \n 1.2 fork创建前执行printf函数 1.2.1 fork创建前执行printf函数带\n…...
应用服务接口第二次请求一直pending问题
目录 一、问题背景二、问题排查过程三、解决方案四、总结 一、问题背景 升级内容发布到灰度环境,验证相关服务,查看接口调用日志,发现第一次请求正常,第二次相同接口请求就一直pending,其他服务也是如此 二、问题排查…...
基于FPGA的ESP8266无线数据传输(温湿度DTH11、光照强度BH1750、WIFI模块)连接中国移动onenet云平台,仿真+上板
文章目录 一、创建云平台产品设备二、FPGA仿真WIFI模块通信过程仿真分析2.上板 总结 一、创建云平台产品设备 使用串口助手测试传输过程 相关信息记录 二、FPGA仿真WIFI模块通信过程 仿真分析 //各个状态tx_dataalways (posedge clk or negedge rst_n) beginif(!rst_n) beg…...
5款视觉OCR开源模型
一、号称「世界上最好的 OCR 模型」Mistral OCR Mistral OCR 擅长理解复杂的文档元素,包括交错图像、数学表达式、表格和高级布局(如 LaTeX 格式)。该模型可以更深入地理解丰富的文档,尤其是包含图表、图形、公式和数字的科学论文…...
