Python中os模块详解

发布于:2025-06-05 ⋅ 阅读:(22) ⋅ 点赞:(0)

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 os

def 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 category
    return 'Others'  # 未知类型放入 Others 文件夹

def organize_directory(target_dir):
    """清理并整理目标目录"""
    if not os.path.isdir(target_dir):
        print(f"[!] 路径不存在: {target_dir}")
        return

    for 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());
  • 同名文件移动时会覆盖,若需保留原文件可加重命名逻辑;
  • 移动操作是不可逆的,使用前请备份重要数据。

网站公告

今日签到

点亮在社区的每一天
去签到