Python常见模块之os模块详解
os
是 Python
内置的 操作系统接口模块,用于:
✅ 文件和目录操作(创建、删除、移动)
✅ 环境变量管理
✅ 权限控制(修改文件权限、用户组)
✅ 进程管理(多进程、shell 命令执行)
✅ 企业实战应用:批量文件管理、日志分析、定时任务
导入 os 模块
📌 获取当前工作目录,动态加载配置文件
1 2 3 4 5 6 7
| import os
print(os.name)
print(os.getcwd())
|
文件和目录操作
🔹 获取当前目录
1 2 3 4 5
| import os
current_dir = os.getcwd() print(f"当前目录: {current_dir}")
|
📌 企业应用:动态获取路径,避免硬编码
🔹 列出目录内容
1 2 3 4 5
| import os
files = os.listdir(".") print(f"目录内容: {files}")
|
📌 企业应用:批量读取文件夹中的数据文件
🔹 创建新目录
1 2 3 4 5 6 7
| import os
os.mkdir("new_folder")
os.makedirs("new_folder/sub_folder")
|
📌 企业应用:创建日志存放目录
🔹 删除目录
1 2 3 4 5 6 7 8
| import os
os.rmdir("new_folder")
os.removedirs("new_folder/sub_folder")
|
📌 企业应用:清理临时文件夹
🔹 判断文件/目录是否存在
1 2 3 4 5 6 7
| import os
if os.path.exists("test.txt"): print("文件存在") else: print("文件不存在")
|
📌 企业应用:防止文件读写错误
🔹 递归遍历目录
1 2 3 4 5 6 7
| import os
for root, dirs, files in os.walk("."): print(f"目录: {root}") print(f"子目录: {dirs}") print(f"文件: {files}")
|
📌 企业应用:快速列出父子目录
🔹 拆分文件扩展名
1 2 3 4
| import os file_name, ext = os.path.splitext("test.txt") print(f"文件名: {file_name}, 扩展名: {ext}")
|
🔹 拼接路径
1 2 3 4
| import os
path = os.path.join("home", "user", "file.txt") print(path)
|
文件管理
🔹 创建和写入文件
1 2 3
| with open("test.txt", "w") as f: f.write("Hello, os module!")
|
📌 企业应用:自动化日志生成
🔹 读取文件内容
1 2 3
| with open("test.txt", "r") as f: content = f.read() print(content)
|
📌 企业应用:读取配置文件、日志分析
🔹 删除文件
1 2 3 4
| if os.path.exists("test.txt"): os.remove("test.txt") print("文件已删除")
|
📌 企业应用:定期清理无用文件
修改文件名和路径
🔹 获取文件路径
1 2 3 4 5
| import os
file_path = os.path.abspath("test.txt") print(f"文件路径: {file_path}")
|
📌 企业应用:日志分析、数据处理
🔹 拆分文件路径
1 2 3 4 5 6 7 8
| import os
path = "/home/user/data/file.txt" dirname, filename = os.path.split(path)
print(f"目录: {dirname}") print(f"文件名: {filename}")
|
📌 企业应用:动态管理文件路径
🔹 修改文件名
1 2
| import os os.rename("old_name.txt", "new_name.txt")
|
📌 企业应用:批量重命名文件
进程管理
🔹 获取当前进程 ID
1 2 3
| import os
print(f"当前进程 ID: {os.getpid()}")
|
📌 企业应用:监控程序运行状态
🔹 运行系统命令
1 2 3 4 5
| import os
os.system("ls") os.system("dir")
|
📌 企业应用:自动执行系统任务
🔹 获取系统环境变量
1 2 3 4 5
| import os
print(os.environ.get("HOME")) print(os.environ.get("USERPROFILE"))
|
📌 企业应用:动态读取系统配置
修改文件权限
🔹 修改文件权限
1 2 3 4
| import os
os.chmod("test.txt", 0o777)
|
📌 企业应用:批量修改权限
🔹 修改文件所有者
1 2 3
| import shutil shutil.chown("test.txt", user="username", group="groupname")
|
📌 企业应用:管理服务器文件权限
批量处理企业级任务
🔹 批量重命名文件
1 2 3 4 5 6 7
| import os
folder = "data" for filename in os.listdir(folder): old_path = os.path.join(folder, filename) new_path = os.path.join(folder, "new_" + filename) os.rename(old_path, new_path)
|
📌 企业应用:批量重命名日志文件
🔹 批量删除大文件
1 2 3 4 5 6 7 8
| import os
folder = "backup" for filename in os.listdir(folder): file_path = os.path.join(folder, filename) if os.path.getsize(file_path) > 100 * 1024 * 1024: os.remove(file_path)
|
📌 企业应用:清理磁盘空间
高级技巧
🔹 获取磁盘使用情况
1 2 3 4 5 6
| import shutil
total, used, free = shutil.disk_usage("/") print(f"总大小: {total // (1024**3)} GB") print(f"已使用: {used // (1024**3)} GB") print(f"可用: {free // (1024**3)} GB")
|
📌 企业应用:服务器磁盘监控
🔹 执行命令
1️⃣ 使用 os.system()
执行 CMD
命令
os.system()
直接执行命令,但它不会捕获命令的输出,只能返回命令的退出状态(0 表示成功,其他值表示失败)。
1 2 3 4 5 6 7 8
| import os
os.system("dir")
os.system("ls -la")
|
🔹 缺点:
✅不能获取命令执行的结果
✅不能传递参数
✅安全性较差
2️⃣ 使用 os.popen()
获取命令输出
os.popen()
执行命令并获取返回的输出:
1 2 3 4 5 6 7 8 9 10
| import os
cmd_output = os.popen("dir").read() print(cmd_output)
cmd_output = os.popen("ls -la").read() print(cmd_output)
|
🔹 优点:
✅ 能够捕获输出
✅ 适用于简单的命令
🔹 缺点:
🚫 os.popen()
在某些情况下可能阻塞进程
🚫 安全性较低,建议用 ``subprocess` 代替
3️⃣ 推荐使用 subprocess
执行 CMD 命令
subprocess.run()
和 subprocess.Popen()
是更安全、现代的方式。
1 2 3 4 5 6 7 8 9 10
| import subprocess
result = subprocess.run("dir", shell=True, capture_output=True, text=True) print(result.stdout)
result = subprocess.run("ls -la", shell=True, capture_output=True, text=True) print(result.stdout)
|
🔹 优点:
✅ capture_output=True
可以获取命令输出
✅ text=True
自动解码成字符串
🔹 subprocess.Popen()
(更灵活)
如果你想异步执行 CMD
命令,可以使用 Popen()
1 2 3 4 5 6 7 8
| import subprocess
process = subprocess.Popen("dir", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) stdout, stderr = process.communicate()
print("标准输出:", stdout) print("标准错误:", stderr)
|
🔹 优点:
✅ 可以执行多个命令
✅ 可以流式处理输出
✅ 不会阻塞主线程
4️⃣ 在 CMD
运行 Python
脚本
1 2 3 4 5 6 7 8
| import os import subprocess
os.system("python test.py")
subprocess.run("python test.py", shell=True)
|
总结
功能 |
代码示例 |
获取当前目录 |
os.getcwd() |
列出目录内容 |
os.listdir() |
创建目录 |
os.mkdir() / os.makedirs() |
删除目录 |
ros.rmdir() / os.removedirs() |
修改文件权限 |
os.chmod() |
执行 shell 命令 |
os.system() |
批量重命名文件 |
os.rename() |
监控磁盘使用情况 |
shutil.disk_usage() |