Python中的os模块(Operating System模块)提供了与操作系统交互的函数。以下是一些os模块中常用的方法:
一、文件和目录操作:
os.getcwd()
: 获取当前工作目录。import os
# 获取当前工作目录
current_directory = os.getcwd()
# 打印结果
print("当前工作目录:", current_directory)
os.chdir(path)
: 改变当前工作目录。import os
# 获取当前工作目录
current_directory_before = os.getcwd()
# 打印当前工作目录
print("当前工作目录(更改前):", current_directory_before)
# 指定新的路径
new_directory = "/path/to/your/directory"
# 改变当前工作目录到新路径
os.chdir(new_directory)
# 获取改变后的当前工作目录
current_directory_after = os.getcwd()
# 打印改变后的当前工作目录
print("当前工作目录(更改后):", current_directory_after)
os.listdir(path='.')
: 返回指定目录下的所有文件和目录列表。import os
# 指定要列出文件的目录
directory_path = "/path/to/your/directory"
# 获取目录下的文件和文件夹列表
contents = os.listdir(directory_path)
# 打印结果
print(f"目录 '{directory_path}' 下的内容:")
for item in contents:
print(item)
os.mkdir(path)
: 创建目录。注意,该方法创建单层目录 。如果上级目录不存在,会引发 'FileNotFoundError'。
import os
# 指定要创建的目录的路径
new_directory_path = "/path/to/your/new_directory"
# 创建新目录
os.mkdir(new_directory_path)
print(f"目录 '{new_directory_path}' 已创建成功。")
os.makedirs(path)
: 递归创建多层目录。注意,递归创建多层目录。如果上级目录不存在,会自动创建上级目录。
import os
# 指定要创建的目录的路径(包括多层目录)
new_directory_path = "/path/to/your/new_directory/multiple/levels"
try:
# 创建多层目录
os.makedirs(new_directory_path)
print(f"目录 '{new_directory_path}' 及其上级目录已创建成功。")
except Exception as e:
print(f"创建目录时发生错误: {e}")
os.remove(path)
: 删除文件。import os
# 指定要删除的文件路径
file_path = "/path/to/your/file.txt"
try:
# 删除文件
os.remove(file_path)
print(f"文件 '{file_path}' 已成功删除。")
except FileNotFoundError:
print(f"无法删除文件 '{file_path}',因为文件不存在。")
except Exception as e:
print(f"删除文件时发生错误: {e}")
os.rmdir(path)
: 删除目录(只能删除空目录)。注意,os.rmdir(path) 用于删除指定路径上的空目录。如果目录不为空,os.rmdir() 会引发 OSError。
import os
# 指定要删除的目录路径
directory_path = "/path/to/your/empty_directory"
try:
# 删除空目录
os.rmdir(directory_path)
print(f"目录 '{directory_path}' 已成功删除。")
except FileNotFoundError:
print(f"无法删除目录 '{directory_path}',因为目录不存在。")
except OSError as e:
print(f"删除目录时发生错误: {e}")
os.removedirs(path)
: 递归删除目录树。注意,os.removedirs(path) 函数用于递归地删除目录树。与 os.rmdir() 不同,os.removedirs() 会删除指定路径上的目录及其上级目录,只要它们都是空的。如果目录中有非空的子目录或文件,删除将失败。如果需要删除非空目录树,可以考虑使用 shutil.rmtree()。
import os
# 指定要删除的目录路径
directory_path = "/path/to/your/directory_tree"
try:
# 递归删除目录树
os.removedirs(directory_path)
print(f"目录树 '{directory_path}' 及其上级目录已成功删除。")
except FileNotFoundError:
print(f"无法删除目录树 '{directory_path}',因为路径不存在。")
except OSError as e:
print(f"删除目录树时发生错误: {e}")
二、路径操作:
os.path.join(path, *paths)
: 将多个路径组合成一个路径。import os
# 指定路径的各个部分
base_path = "/path/to/your/base"
subfolder = "subfolder"
file_name = "example.txt"
# 使用 os.path.join() 连接路径
full_path = os.path.join(base_path, subfolder, file_name)
# 打印连接后的路径
print(f"连接后的路径: {full_path}")
os.path.abspath(path)
: 返回绝对路径。import os
# 指定相对路径
relative_path = "subfolder/example.txt"
# 使用 os.path.abspath() 获取绝对路径
absolute_path = os.path.abspath(relative_path)
# 打印结果
print(f"相对路径: {relative_path}")
print(f"绝对路径: {absolute_path}")
os.path.exists(path)
: 判断路径是否存在。import os
# 指定要检查的路径
path_to_check = "/path/to/your/file.txt"
# 使用 os.path.exists() 检查路径是否存在
if os.path.exists(path_to_check):
print(f"路径 '{path_to_check}' 存在。")
else:
print(f"路径 '{path_to_check}' 不存在。")
os.path.isfile(path)
: 判断是否为文件。import os
# 指定要检查的路径
file_path = "/path/to/your/file.txt"
# 使用 os.path.isfile() 检查路径是否为文件
if os.path.isfile(file_path):
print(f"路径 '{file_path}' 是一个文件。")
else:
print(f"路径 '{file_path}' 不是一个文件,可能是目录或不存在。")
os.path.isdir(path)
: 判断是否为目录。import os
# 指定要检查的路径
directory_path = "/path/to/your/directory"
# 使用 os.path.isdir() 检查路径是否为目录
if os.path.isdir(directory_path):
print(f"路径 '{directory_path}' 是一个目录。")
else:
print(f"路径 '{directory_path}' 不是一个目录,可能是文件或不存在。")
三、系统环境变量:
os.environ
: 包含系统环境变量的字典。import os
# 获取所有环境变量
all_env_variables = os.environ
# 打印所有环境变量
print("所有环境变量:")
for key, value in all_env_variables.items():
print(f"{key}: {value}")
# 获取特定环境变量的值
home_directory = os.environ.get('HOME', '未设置') # 如果不存在,返回默认值 '未设置'
# 打印特定环境变量的值
print(f"HOME 环境变量的值: {home_directory}")
os.getenv(key, default=None)
: 获取环境变量的值。import os
# 获取 HOME 环境变量的值
home_directory = os.getenv('HOME', '未设置') # 如果不存在,返回默认值 '未设置'
# 打印 HOME 环境变量的值
print(f"HOME 环境变量的值: {home_directory}")
# 获取不存在的环境变量的值,并指定默认值
nonexistent_variable = os.getenv('NONEXISTENT_VARIABLE', '默认值')
# 打印不存在的环境变量的值
print(f"NONEXISTENT_VARIABLE 环境变量的值: {nonexistent_variable}")
四、执行系统命令:
os.system(command)
: 在子shell中执行系统命令。注意,1、示例中,os.system('pwd') 在类 Unix 系统上执行命令来打印当前工作目录,而在 Windows 上可能需要使用 os.system('cd') 或 os.system('echo %cd%')。执行命令后,os.system() 返回命令的退出状态码,并通过 print 打印出来。
2、os.system() 存在一些安全性和平台差异的问题,可以使用 subprocess 模块来执行命令,它提供了更多的控制和安全性。例如,subprocess.run() 是一个替代方案。
import os
# 执行一个简单的命令,例如打印当前工作目录
command = 'pwd' # 在 Windows 上可能是 'cd' 或 'echo %cd%'
# 使用 os.system() 执行命令
exit_status = os.system(command)
# 打印命令的退出状态码
print(f"命令 '{command}' 的退出状态码: {exit_status}")
os.popen(command)
: 打开一个管道,执行系统命令。注意,1、示例中,os.popen('ls') 在类 Unix 系统上执行命令来列出当前目录下的文件,而在 Windows 上可能需要使用 os.popen('dir')。os.popen() 返回一个文件对象,可以通过 read() 方法读取命令的输出内容,然后通过 print 打印出来。最后,记得关闭文件对象,释放资源。
2、与 os.system() 一样,os.popen() 也存在一些安全性和平台差异的问题,也可以使用 subprocess 模块来执行命令,以获得更多的控制和安全性。
import os
# 执行一个简单的命令,例如列出当前目录下的文件
command = 'ls' # 在 Windows 上可能是 'dir'
# 使用 os.popen() 执行命令并获取输出文件对象
output_file = os.popen(command)
# 读取命令的输出内容
output_content = output_file.read()
# 打印命令的输出内容
print(f"命令 '{command}' 的输出:\n{output_content}")
# 关闭文件对象
output_file.close()
五、文件路径拆分:
os.path.split(path)
: 将路径拆分为目录和文件名。import os
# 指定路径
file_path = "/path/to/your/file.txt"
# 使用 os.path.split() 分割路径
directory, file_name = os.path.split(file_path)
# 打印分割后的结果
print(f"目录: {directory}")
print(f"文件名: {file_name}")
os.path.splitext(path)
: 将路径拆分为文件名和扩展名。import os
# 指定文件路径
file_path = "/path/to/your/file.txt"
# 使用 os.path.splitext() 分割文件路径
file_name, file_extension = os.path.splitext(file_path)
# 打印分割后的结果
print(f"文件名: {file_name}")
print(f"扩展名: {file_extension}")
六、其他:
os.name
: 获取操作系统名称('posix' 或 'nt')。通常,'posix' 表示类 Unix 操作系统,'nt' 表示 Windows 操作系统。
import os
# 获取当前操作系统的名称
current_os_name = os.name
# 打印当前操作系统的名称
print(f"当前操作系统的名称: {current_os_name}")
os.path.getsize(path)
: 获取文件大小。import os
# 指定文件路径
file_path = "/path/to/your/file.txt"
# 使用 os.path.getsize() 获取文件大小
file_size = os.path.getsize(file_path)
# 打印文件大小
print(f"文件 '{file_path}' 的大小: {file_size} 字节")
os.path.getctime(path)
: 获取文件的创建时间。import os
import datetime
# 指定文件路径
file_path = "/path/to/your/file.txt"
# 使用 os.path.getctime() 获取文件创建时间
ctime_timestamp = os.path.getctime(file_path)
# 将时间戳转换为可读的日期时间格式
ctime_datetime = datetime.datetime.fromtimestamp(ctime_timestamp)
# 打印文件创建时间
print(f"文件 '{file_path}' 的创建时间: {ctime_datetime}")
os.path.getmtime(path)
: 获取文件的最后修改时间。import os
import datetime
# 指定文件路径
file_path = "/path/to/your/file.txt"
# 使用 os.path.getmtime() 获取文件最后修改时间
mtime_timestamp = os.path.getmtime(file_path)
# 将时间戳转换为可读的日期时间格式
mtime_datetime = datetime.datetime.fromtimestamp(mtime_timestamp)
# 打印文件最后修改时间
print(f"文件 '{file_path}' 的最后修改时间: {mtime_datetime}")
七、更多
os模块 官方文档:os — Miscellaneous operating system interfaces
os模块 中文文档:os — 操作系统接口