OS模块基础总结
OS模块基础大总结
Python 的 os
模块提供了与操作系统交互的多种功能,主要用于文件和目录的操作、获取系统信息以及进程管理。以下是对 os
模块常用功能的总结,以及实际代码示例。
1. OS模块基础操作
1.1 获取和设置当前工作目录
os.getcwd()
: 获取当前工作目录。os.chdir(path)
: 改变当前工作目录。
代码示例:
import os
# 获取当前工作目录
current_dir = os.getcwd()
print("当前工作目录:", current_dir)
# 改变当前工作目录
new_dir = "/tmp" # 示例路径
os.chdir(new_dir)
print("修改后的工作目录:", os.getcwd())
1.2 创建和删除目录
os.mkdir(path)
: 创建单级目录。os.makedirs(path)
: 递归创建多级目录。os.rmdir(path)
: 删除单级目录(仅当目录为空时)。os.removedirs(path)
: 递归删除多级目录(仅当所有目录均为空时)。
代码示例:
# 创建单级目录
os.mkdir("example_dir")
# 创建多级目录
os.makedirs("example_dir/sub_dir")
# 删除单级目录
os.rmdir("example_dir/sub_dir")
# 删除多级目录
os.removedirs("example_dir")
1.3 文件操作
os.remove(path)
: 删除文件。os.rename(src, dst)
: 重命名文件或目录。os.replace(src, dst)
: 替换文件(如果目标存在则覆盖)。
代码示例:
# 创建一个测试文件
with open("test.txt", "w") as f:
f.write("Hello, OS module!")
# 重命名文件
os.rename("test.txt", "renamed_test.txt")
# 删除文件
os.remove("renamed_test.txt")
1.4 获取文件/目录属性
os.stat(path)
: 返回文件或目录的属性(如大小、修改时间)。os.path.exists(path)
: 检查文件或目录是否存在。os.path.isfile(path)
: 检查路径是否为文件。os.path.isdir(path)
: 检查路径是否为目录。
代码示例:
file_path = "example.txt"
# 创建文件
with open(file_path, "w") as f:
f.write("Check file attributes.")
# 检查文件属性
if os.path.exists(file_path):
print("文件存在")
print("是否是文件:", os.path.isfile(file_path))
print("是否是目录:", os.path.isdir(file_path))
print("文件大小:", os.stat(file_path).st_size, "bytes")
# 删除文件
os.remove(file_path)
1.5 获取目录内容
os.listdir(path)
: 列出指定目录的内容。os.scandir(path)
: 返回目录条目的迭代器(包括更多属性)。
代码示例:
os.mkdir("test_dir")
with open("test_dir/example.txt", "w") as f:
f.write("Example file in directory.")
# 列出目录内容
print("目录内容:", os.listdir("test_dir"))
# 使用 os.scandir 获取详细信息
with os.scandir("test_dir") as entries:
for entry in entries:
print(f"名称: {entry.name}, 是否是文件: {entry.is_file()}")
os.remove("test_dir/example.txt")
os.rmdir("test_dir")
2. 环境变量操作
os.environ
: 获取环境变量的字典。os.getenv(key, default=None)
: 获取指定的环境变量。os.putenv(key, value)
: 设置环境变量(已被os.environ
取代)。
代码示例:
# 获取所有环境变量
env_vars = os.environ
print("所有环境变量:", env_vars)
# 获取特定环境变量
path_var = os.getenv("PATH")
print("PATH 环境变量:", path_var)
# 设置环境变量
os.environ["MY_VAR"] = "HelloWorld"
print("自定义环境变量:", os.getenv("MY_VAR"))
3. 系统相关信息
os.name
: 返回操作系统名称(如posix
或nt
)。os.uname()
: 返回详细的操作系统信息(仅posix
系统可用)。os.cpu_count()
: 返回 CPU 核心数。
代码示例:
print("操作系统名称:", os.name)
if hasattr(os, "uname"): # 仅在 posix 系统上有效
print("操作系统详细信息:", os.uname())
print("CPU 核心数:", os.cpu_count())
4. 路径操作
os.path
子模块提供了丰富的路径操作功能。
4.1 路径拼接和分割
os.path.join(path1, path2, ...)
: 拼接路径。os.path.split(path)
: 分割路径为目录和文件名。os.path.basename(path)
: 获取路径中的文件名。os.path.dirname(path)
: 获取路径中的目录部分。
代码示例:
path = os.path.join("home", "user", "example.txt")
print("拼接后的路径:", path)
# 分割路径
dir_name, file_name = os.path.split(path)
print("目录:", dir_name, ", 文件名:", file_name)
# 获取路径的目录部分
print("目录部分:", os.path.dirname(path))
# 获取路径的文件名部分
print("文件名部分:", os.path.basename(path))
4.2 绝对路径与规范化
os.path.abspath(path)
: 获取绝对路径。os.path.normpath(path)
: 规范化路径。os.path.realpath(path)
: 获取真实路径(处理符号链接)。
代码示例:
relative_path = "./example.txt"
# 获取绝对路径
print("绝对路径:", os.path.abspath(relative_path))
# 规范化路径
messy_path = "/home//user/../example.txt"
print("规范化路径:", os.path.normpath(messy_path))
4.3 路径判断
os.path.exists(path)
: 检查路径是否存在。os.path.isabs(path)
: 判断路径是否为绝对路径。os.path.isfile(path)
,os.path.isdir(path)
: 判断路径是文件还是目录。
5. 进程管理
os.system(command)
: 执行系统命令(推荐使用subprocess
)。os.getpid()
: 获取当前进程 ID。os.getppid()
: 获取父进程 ID。
代码示例:
print("当前进程 ID:", os.getpid())
print("父进程 ID:", os.getppid())
# 执行系统命令(如列出当前目录内容)
os.system("ls" if os.name == "posix" else "dir")
实战案例:清理空目录
以下代码会递归删除指定目录中的所有空目录:
def remove_empty_dirs(path):
for root, dirs, files in os.walk(path, topdown=False):
for dir in dirs:
dir_path = os.path.join(root, dir)
if not os.listdir(dir_path): # 如果目录为空
os.rmdir(dir_path)
print(f"删除空目录: {dir_path}")
# 测试目录清理
os.makedirs("test_dir/sub_dir/empty_dir", exist_ok=True)
remove_empty_dirs("test_dir")
os.removedirs("test_dir") # 清理父目录
总结
os
模块功能强大,涵盖了操作系统与 Python 程序之间的所有交互需求。通过掌握 os
模块,可以轻松实现文件管理、路径操作、环境变量操作等实用功能。