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)
使用说明
- 将上面代码保存为
file_organizer.py
; - 修改
folder_to_organize
为你要整理的目录; - 在终端或命令行运行:
python file_organizer.py
注意事项
- 本脚本不会递归处理子目录中的文件(如需处理可扩展为
os.walk()
); - 同名文件移动时会覆盖,若需保留原文件可加重命名逻辑;
- 移动操作是不可逆的,使用前请备份重要数据。