pythonSTL---os
os
模块是 Python 标准库中一个非常重要的模块,它提供了一种方便的方式来与操作系统进行交互。
1. 导入 os
模块
在使用 os
模块的功能之前,需要先导入它:
import os
2. 操作系统相关信息
2.1 os.name
返回当前操作系统的名称。常见的值有 'posix'
(表示类 Unix 系统,如 Linux、macOS)和 'nt'
(表示 Windows 系统)。
import os
print(os.name)
2.2 os.uname()
(仅适用于类 Unix 系统)
返回一个包含操作系统相关信息的元组,包括系统名称、节点名称、版本号等。
import os
try:
print(os.uname())
except AttributeError:
print("该方法仅适用于类 Unix 系统。")
3. 工作目录操作
3.1 os.getcwd()
获取当前工作目录的路径。
import os
current_dir = os.getcwd()
print(f"当前工作目录: {current_dir}")
3.2 os.chdir(path)
改变当前工作目录到指定的路径。
import os
new_dir = '/path/to/new/directory'
try:
os.chdir(new_dir)
print(f"已将工作目录更改为: {os.getcwd()}")
except FileNotFoundError:
print("指定的目录不存在。")
4. 目录和文件操作
4.1 os.listdir(path='.')
返回指定目录下的所有文件和文件夹的名称列表。如果不指定路径,默认是当前工作目录。
import os
files_and_folders = os.listdir()
for item in files_and_folders:
print(item)
4.2 os.mkdir(path)
创建一个新的目录。如果目录已经存在,会抛出 FileExistsError
异常。
import os
new_dir = 'new_directory'
try:
os.mkdir(new_dir)
print(f"已创建目录: {new_dir}")
except FileExistsError:
print("目录已存在。")
4.3 os.makedirs(path, exist_ok=False)
递归创建目录。如果 exist_ok
为 True
,当目录已经存在时不会抛出异常。
import os
new_dir = 'parent_dir/child_dir'
try:
os.makedirs(new_dir, exist_ok=True)
print(f"已创建目录: {new_dir}")
except FileExistsError:
print("目录已存在。")
4.4 os.rmdir(path)
删除一个空目录。如果目录不为空,会抛出 OSError
异常。
import os
dir_to_remove = 'empty_directory'
try:
os.rmdir(dir_to_remove)
print(f"已删除目录: {dir_to_remove}")
except OSError:
print("目录不为空或不存在。")
4.5 os.removedirs(path)
递归删除目录。如果目录不为空,会抛出 OSError
异常。
import os
dir_to_remove = 'parent_dir/child_dir'
try:
os.removedirs(dir_to_remove)
print(f"已删除目录: {dir_to_remove}")
except OSError:
print("目录不为空或不存在。")
4.6 os.remove(path)
删除指定的文件。
import os
file_to_remove = 'test.txt'
try:
os.remove(file_to_remove)
print(f"已删除文件: {file_to_remove}")
except FileNotFoundError:
print("文件不存在。")
4.7 os.rename(src, dst)
重命名文件或目录。
import os
old_name = 'old_file.txt'
new_name = 'new_file.txt'
try:
os.rename(old_name, new_name)
print(f"已将 {old_name} 重命名为 {new_name}")
except FileNotFoundError:
print("源文件或目录不存在。")
4.8 os.replace(src, dst)
将源文件或目录移动或替换为目标文件或目录。如果目标文件已存在,会被覆盖。
import os
src = 'source_file.txt'
dst = 'destination_file.txt'
try:
os.replace(src, dst)
print(f"已将 {src} 移动或替换为 {dst}")
except FileNotFoundError:
print("源文件或目录不存在。")
5. 文件和目录路径操作
5.1 os.path.join(path, *paths)
将多个路径组合成一个完整的路径。
import os
base_dir = '/home/user'
sub_dir = 'documents'
file_name = 'test.txt'
full_path = os.path.join(base_dir, sub_dir, file_name)
print(full_path)
5.2 os.path.exists(path)
检查指定的路径是否存在。
import os
path = '/path/to/some/file.txt'
if os.path.exists(path):
print("路径存在。")
else:
print("路径不存在。")
5.3 os.path.isfile(path)
检查指定的路径是否为文件。
import os
path = '/path/to/some/file.txt'
if os.path.isfile(path):
print("该路径是一个文件。")
else:
print("该路径不是一个文件。")
5.4 os.path.isdir(path)
检查指定的路径是否为目录。
import os
path = '/path/to/some/directory'
if os.path.isdir(path):
print("该路径是一个目录。")
else:
print("该路径不是一个目录。")
5.5 os.path.split(path)
将路径拆分为目录和文件名两部分,返回一个元组。
import os
path = '/home/user/documents/test.txt'
dir_name, file_name = os.path.split(path)
print(f"目录: {dir_name}")
print(f"文件名: {file_name}")
5.6 os.path.splitext(path)
将路径拆分为文件名和文件扩展名两部分,返回一个元组。
import os
path = '/home/user/documents/test.txt'
file_name, ext = os.path.splitext(path)
print(f"文件名: {file_name}")
print(f"文件扩展名: {ext}")
6. 环境变量操作
6.1 os.environ
返回一个包含当前环境变量的字典。
import os
for key, value in os.environ.items():
print(f"{key}: {value}")
6.2 os.getenv(key, default=None)
获取指定环境变量的值。如果环境变量不存在,返回默认值。
import os
path_variable = os.getenv('PATH')
print(f"PATH 环境变量的值: {path_variable}")
6.3 os.putenv(key, value)
设置环境变量的值。注意,在某些系统上,这个方法可能不会立即生效。
import os
os.putenv('MY_VARIABLE', 'my_value')
print(os.getenv('MY_VARIABLE'))
7. 执行系统命令
7.1 os.system(command)
在系统的 shell 中执行指定的命令,并返回命令的返回值。
import os
return_code = os.system('ls -l')
print(f"命令返回值: {return_code}")
7.2 os.popen(command)
执行指定的命令,并返回一个文件对象,可以通过该对象读取命令的输出。
import os
output = os.popen('ls -l').read()
print(output)
8. 进程相关操作(部分系统适用)
8.1 os.getpid()
返回当前进程的进程 ID。
import os
pid = os.getpid()
print(f"当前进程 ID: {pid}")
8.2 os.getppid()
返回当前进程的父进程的进程 ID。
import os
ppid = os.getppid()
print(f"父进程 ID: {ppid}")