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

Python中os模块详解

Python os 模块详解

os 模块提供了丰富的文件和目录操作环境变量访问进程管理等功能,是与操作系统交互的核心模块之一。


基本导入方式

import os

常用目录与文件操作


1️⃣ 获取/设置当前工作目录

os.getcwd()           # 获取当前工作目录
os.chdir('/tmp')      # 改变当前工作目录

2️⃣ 路径拼接与判断(推荐用法)

# 路径拼接,自动处理斜杠
path = os.path.join('folder', 'subfolder', 'file.txt')# 判断路径类型
os.path.exists(path)        # 路径是否存在
os.path.isfile(path)        # 是否是文件
os.path.isdir(path)         # 是否是目录

3️⃣ 创建与删除目录

os.mkdir('mydir')           # 创建单级目录
os.makedirs('a/b/c')        # 创建多级目录
os.rmdir('mydir')           # 删除空目录
os.removedirs('a/b/c')      # 递归删除空目录

4️⃣ 列出目录内容

os.listdir('.')  # 当前目录下的所有文件和文件夹

5️⃣ 文件操作(删除、重命名、移动)

os.remove('file.txt')                 # 删除文件
os.rename('old.txt', 'new.txt')      # 重命名
os.replace('a.txt', 'b.txt')         # 原子性重命名(覆盖 b.txt)

注意:不支持复制操作(请使用 shutil 模块复制文件)


6️⃣ 获取文件大小、属性

size = os.path.getsize('file.txt')   # 获取字节大小
mtime = os.path.getmtime('file.txt') # 获取修改时间戳

路径操作函数(推荐配合 os.path 使用)

os.path.abspath('a.txt')              # 获取绝对路径
os.path.basename('/a/b/c.txt')        # 获取文件名:c.txt
os.path.dirname('/a/b/c.txt')         # 获取目录:/a/b
os.path.splitext('file.txt')          # ('file', '.txt')

环境变量操作

os.environ['HOME']                   # 获取环境变量
os.environ.get('PATH', '')           # 更安全的获取方式
os.environ['MY_VAR'] = '123'         # 设置环境变量(当前进程内有效)

进程与系统命令调用

1️⃣ 获取进程相关信息

os.getpid()        # 当前进程 ID
os.getppid()       # 父进程 ID
os.uname()         # 获取系统信息(Linux/macOS 有效)

2️⃣ 运行系统命令(非推荐)

os.system("ls -l")     # 执行命令并打印结果(不建议用于重要逻辑)

更推荐使用 subprocess 模块。


权限与状态检查(高级)

os.access('file.txt', os.R_OK)  # 是否可读
os.access('file.txt', os.W_OK)  # 是否可写
os.chmod('file.txt', 0o755)     # 改变文件权限(Linux/macOS)

示例:递归列出目录中所有 .txt 文件

import osdef list_txt_files(dir_path):for root, dirs, files in os.walk(dir_path):for file in files:if file.endswith('.txt'):print(os.path.join(root, file))list_txt_files('./myfolder')

注意事项

⚠️ 项目描述
路径拼接永远使用 os.path.join(),不要硬编码斜杠
删除操作删除文件/目录前请先检查是否存在,避免异常
路径兼容尽量使用 os.path.abspath()os.sep 等跨平台方法
系统命令推荐使用 subprocess 替代 os.system()

常见用途速查表

功能示例
获取当前路径os.getcwd()
拼接路径os.path.join(a, b)
判断是否存在os.path.exists(path)
列出目录文件os.listdir(path)
遍历文件树os.walk(path)
创建目录os.makedirs(path)
删除文件/目录os.remove(path), os.rmdir(path)
获取文件属性os.path.getsize(), getmtime()
环境变量访问os.environ.get('PATH')
运行系统命令os.system("echo Hello")
改权限os.chmod(file, 0o644)

自动分类清理脚本(按扩展名整理文件)综合示例

功能说明:

  • 将指定目录下的文件按 文件扩展名 分类;
  • 自动创建子文件夹,如:Images/, Documents/, Videos/ 等;
  • 支持自定义扩展名类别;
  • 忽略文件夹、不处理子目录中的文件(可扩展支持递归);

脚本代码如下:

import os
import shutil# 分类映射表:扩展名 -> 目标文件夹
FILE_CATEGORIES = {'Images': ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tiff'],'Documents': ['.pdf', '.doc', '.docx', '.xls', '.xlsx', '.ppt', '.pptx', '.txt'],'Videos': ['.mp4', '.avi', '.mov', '.mkv'],'Music': ['.mp3', '.wav', '.flac'],'Archives': ['.zip', '.rar', '.7z', '.tar', '.gz'],'Scripts': ['.py', '.js', '.sh', '.bat', '.cpp', '.c', '.java'],
}def get_category(extension):"""根据文件扩展名返回所属分类名"""for category, ext_list in FILE_CATEGORIES.items():if extension.lower() in ext_list:return categoryreturn 'Others'  # 未知类型放入 Others 文件夹def organize_directory(target_dir):"""清理并整理目标目录"""if not os.path.isdir(target_dir):print(f"[!] 路径不存在: {target_dir}")returnfor entry in os.listdir(target_dir):file_path = os.path.join(target_dir, entry)if os.path.isfile(file_path):ext = os.path.splitext(entry)[1]category = get_category(ext)target_folder = os.path.join(target_dir, category)os.makedirs(target_folder, exist_ok=True)new_path = os.path.join(target_folder, entry)try:shutil.move(file_path, new_path)print(f"[√] 移动: {entry} -> {category}/")except Exception as e:print(f"[!] 移动失败: {entry},原因:{e}")if __name__ == "__main__":# 修改为你要整理的目录folder_to_organize = r"C:\Users\yourname\Downloads"organize_directory(folder_to_organize)

使用说明

  1. 将上面代码保存为 file_organizer.py
  2. 修改 folder_to_organize 为你要整理的目录;
  3. 在终端或命令行运行:
python file_organizer.py

注意事项

  • 本脚本不会递归处理子目录中的文件(如需处理可扩展为 os.walk());
  • 同名文件移动时会覆盖,若需保留原文件可加重命名逻辑;
  • 移动操作是不可逆的,使用前请备份重要数据。

相关文章:

  • 蓝桥杯 k倍区间
  • [蓝桥杯]生物芯片
  • 负载均衡相关基本概念
  • 通过阿里云 DashScope API 调用通义千问
  • [蓝桥杯]求解台阶问题
  • Redis 缓存问题及其解决方案
  • DrissionPage 异常处理实战指南:构建稳健的网页自动化防线
  • Eureka 高可用集群搭建实战:服务注册与发现的底层原理与避坑指南
  • n8n 自动化平台 Docker 部署教程(附 PostgreSQL 与更新指南)
  • (13)java+ selenium->元素定位大法之By_partial_link_text
  • 04 APP 自动化- Appium toast 元素定位列表滑动
  • 内网横向之RDP缓存利用
  • Redis 缓存粒度如何控制?缓存整个对象还是部分字段?
  • Mac 芯片系列 安装cocoapod 教程
  • 【linux】VNC无头显示器启动方法
  • Neo4j 备份与恢复:原理、技术与最佳实践
  • 高效易用的 MAC 版 SVN 客户端:macSvn 使用体验
  • HALCON 深度学习训练 3D 图像的几种方式优缺点
  • 2022年 国内税务年鉴PDF电子版Excel
  • C#基础语法(2)
  • 图片素材网站怎么做/seo综合查询是什么
  • 网站图片链接到视频怎么做/搜狗网站排名软件
  • 做包装盒子的厂家哪个网站/十种营销方式
  • 泸州北京网站建设/一站式媒体发布平台
  • 网站服务器搬迁/seo托管公司
  • 免费外贸b2c网站建设/seo助力网站转化率提升