Python中的os模块中的常用方法

2024-01-01 14:07:54

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 — 操作系统接口

文章来源:https://blog.csdn.net/weixin_51659315/article/details/135298258
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。