当前位置: 首页 > 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());
  • 同名文件移动时会覆盖,若需保留原文件可加重命名逻辑;
  • 移动操作是不可逆的,使用前请备份重要数据。
http://www.lqws.cn/news/106021.html

相关文章:

  • Spring Boot 自动配置原理:从入门到精通
  • webstrom中git插件勾选提交部分文件时却出现提交全部问题怎么解决
  • UGUI Text/TextMeshPro字体组件
  • Activity
  • 6.3本日总结
  • agent mode 代理模式,整体要求,系统要求, 系统指令
  • ABP-Book Store Application中文讲解 - Part 7: Authors: Database Integration
  • 『uniapp』把接口的内容下载为txt本地保存 / 读取本地保存的txt文件内容(详细图文注释)
  • WPS word 已有多级列表序号
  • 免费批量文件重命名软件
  • AI健康小屋+微高压氧舱:科技如何重构我们的健康防线?
  • KITTI数据集(计算机视觉和自动驾驶领域)
  • mobilnet v4 部署笔记
  • go语言基础|slice入门
  • C语言学习—数据类型20250603
  • 2025.6.3总结
  • Jpom:Java开发者的一站式自动化运维平台详解
  • Java编程之建造者模式
  • 深度学习入门Day2--鱼书学习(1)
  • 【Typst】4.导入、包含和读取
  • Spring AI Alibaba + Nacos 动态 MCP Server 代理方案
  • Playwright定位器详解:自动化测试的核心工具
  • 集合类基础概念
  • 2023年12月四级真题作文的分析总结
  • 704. 二分查找 (力扣)
  • 十五、【测试执行篇】异步与并发:使用 Celery 实现测试任务的后台执行与结果回调
  • GaLore:基于梯度低秩投影的大语言模型高效训练方法详解一
  • JSCH使用SFTP详细教程
  • Hadoop复习(九)
  • Linux 与 Windows:哪个操作系统适合你?