Python常见模块之os模块详解

Python常见模块之os模块详解

osPython 内置的 操作系统接口模块,用于:

✅ 文件和目录操作(创建、删除、移动)
✅ 环境变量管理
✅ 权限控制(修改文件权限、用户组)
✅ 进程管理(多进程、shell 命令执行)
✅ 企业实战应用:批量文件管理、日志分析、定时任务

导入 os 模块

📌 获取当前工作目录,动态加载配置文件

1
2
3
4
5
6
7
import os

# 查看操作系统类型
print(os.name) # Windows: 'nt', Linux/Mac: 'posix'

# 获取当前 Python 运行的目录
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) # "home/user/file.txt"

文件管理

🔹 创建和写入文件

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") # os.path.abspath():获取绝对路径
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") # Linux/macOS
os.system("dir") # Windows

📌 企业应用:自动执行系统任务

🔹 获取系统环境变量

1
2
3
4
5
import os

print(os.environ.get("HOME")) # macOS/Linux
print(os.environ.get("USERPROFILE")) # Windows

📌 企业应用:动态读取系统配置

修改文件权限

🔹 修改文件权限

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: # 删除大于 100MB 的文件
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

# 执行 Windows 命令
os.system("dir") # 列出当前目录下的文件(Windows)

# 执行 Linux / macOS 命令
os.system("ls -la") # 列出当前目录的详细信息

🔹 缺点:

✅不能获取命令执行的结果
✅不能传递参数
✅安全性较差

2️⃣ 使用 os.popen() 获取命令输出

os.popen() 执行命令并获取返回的输出:

1
2
3
4
5
6
7
8
9
10
import os

# Windows 下执行 "dir" 命令并读取输出
cmd_output = os.popen("dir").read()
print(cmd_output)

# Linux / macOS 下执行 "ls -la" 命令并读取输出
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

# Windows: 执行 "dir" 并获取输出
result = subprocess.run("dir", shell=True, capture_output=True, text=True)
print(result.stdout) # 输出命令执行结果

# Linux/macOS: 执行 "ls -la"
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

# 运行 test.py
os.system("python test.py")

# 或者用 subprocess
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()

Python常见模块之os模块详解
https://dreamshao.github.io/2025/03/27/python常见os模块详解/
作者
Yun Shao
发布于
2025年3月27日
许可协议