Python教学-最常用的标准库之一——OS库
os
库是 Python 标准库中的一个模块,它提供了一种方便的方式来使用操作系统相关的功能。os
模块提供了很多函数,可以用来处理文件和目录、访问环境变量、执行系统命令等。以下是一些常用的 os
模块的功能和示例:
1. 文件和目录操作
1.1 当前工作目录
os.getcwd()
:获取当前工作目录。os.chdir(path)
:改变当前工作目录。
import os
current_dir = os.getcwd()
print("当前工作目录:", current_dir)
os.chdir('/path/to/new/directory')
new_dir = os.getcwd()
print("改变后的工作目录:", new_dir)
1.2 创建和删除目录
os.mkdir(path)
:创建单个目录。os.makedirs(path, exist_ok=False)
:递归创建目录。如果exist_ok=True
,目录已存在时不报错。os.rmdir(path)
:删除单个空目录。os.removedirs(path)
:递归删除目录。
os.makedirs('dir1/dir2', exist_ok=True)
os.rmdir('dir1/dir2') # 只能删除空目录
os.removedirs('dir1/dir2') # 递归删除
1.3 列出目录内容
os.listdir(path)
:列出指定目录下的所有文件和目录。
files_and_dirs = os.listdir('.')
print("当前目录下的文件和目录:", files_and_dirs)
1.4 文件路径操作
os.path.join(path, *paths)
:智能拼接路径。os.path.abspath(path)
:获取绝对路径。os.path.dirname(path)
:获取目录名。os.path.basename(path)
:获取文件名。os.path.exists(path)
:检查路径是否存在。os.path.isfile(path)
:检查路径是否为文件。os.path.isdir(path)
:检查路径是否为目录。os.path.getsize(path)
:获取文件大小(字节)。
full_path = os.path.join('dir1', 'file.txt')
abs_path = os.path.abspath(full_path)
dir_name = os.path.dirname(abs_path)
file_name = os.path.basename(abs_path)
print("完整路径:", full_path)
print("绝对路径:", abs_path)
print("目录名:", dir_name)
print("文件名:", file_name)
print("路径是否存在:", os.path.exists(abs_path))
print("是否为文件:", os.path.isfile(abs_path))
print("是否为目录:", os.path.isdir(dir_name))
if os.path.isfile(abs_path):
print("文件大小:", os.path.getsize(abs_path), "字节")
2. 环境变量
os.getenv(key, default=None)
:获取环境变量的值,如果不存在则返回default
。os.environ
:获取一个包含所有环境变量的字典。os.putenv(key, value)
:设置环境变量(仅在某些平台上有效,建议使用os.environ
)。os.unsetenv(key)
:删除环境变量(仅在某些平台上有效)。
# 获取环境变量
home_dir = os.getenv('HOME')
print("HOME 环境变量:", home_dir)
# 设置环境变量
os.environ['MY_VAR'] = 'my_value'
print("MY_VAR 环境变量:", os.getenv('MY_VAR'))
# 删除环境变量(仅在支持 unsetenv 的平台上有效)
# os.unsetenv('MY_VAR')
3. 执行系统命令
os.system(command)
:在子终端执行系统命令。os.popen(cmd, mode='r', buffering=-1)
:打开一个管道连接到或从一个命令。subprocess
模块:更强大和灵活的子进程管理模块,建议使用subprocess
代替os.system
和os.popen
。
# 使用 os.system 执行命令
exit_code = os.system('ls -l')
print("命令执行后的退出码:", exit_code)
# 使用 os.popen 执行命令并读取输出
process = os.popen('ls -l')
output = process.read()
print("命令输出:\n", output)
process.close()
4. 文件和目录权限
os.chmod(path, mode)
:改变文件或目录的权限。os.chown(path, uid, gid)
:改变文件或目录的所有者和组(仅在 Unix 上有效)。
# 假设你有一个文件 'file.txt'
# os.chmod('file.txt', 0o755) # 设置文件权限为 rwxr-xr-x
5. 临时文件和目录
tempfile.TemporaryFile()
:创建一个临时文件,文件关闭后会自动删除。tempfile.NamedTemporaryFile()
:创建一个命名临时文件,文件关闭后会自动删除。tempfile.mkdtemp()
:创建一个临时目录,可以手动删除。tempfile.TemporaryDirectory()
:创建一个临时目录,目录关闭后会自动删除。
import tempfile
# 创建一个临时文件
with tempfile.TemporaryFile() as temp_file:
temp_file.write(b'Hello, World!')
temp_file.seek(0)
print(temp_file.read())
# 创建一个命名临时文件
with tempfile.NamedTemporaryFile(delete=False) as named_temp_file:
temp_file_name = named_temp_file.name
print("命名临时文件:", temp_file_name)
# 可以手动删除文件
# os.remove(temp_file_name)
# 创建一个临时目录
temp_dir = tempfile.mkdtemp()
print("临时目录:", temp_dir)
# 可以手动删除目录
# os.rmdir(temp_dir) 或 os.removedirs(temp_dir) 如果是递归创建的
# 创建一个自动删除的临时目录
with tempfile.TemporaryDirectory() as temp_dir_ctx:
print("自动删除的临时目录:", temp_dir_ctx)
这些只是 os
模块中的一些基本功能,实际上 os
模块的功能非常丰富,适用于各种操作系统相关的任务。如果需要更复杂的子进程管理,建议查阅 subprocess
模块。