os
模块是 Python 标准库中的一个模块,它提供了一种方便的使用操作系统功能的方式。通过 os
模块,Python 程序可以执行许多与操作系统交互的任务,如文件和目录管理、进程管理、环境变量处理等。下面是一些常用的 os
模块功能及其示例:
一. 文件和目录管理
1.1、创建、删除和重命名文件和目录
os.makedirs(name, mode=0o777, exist_ok=False)
: 递归地创建目录。如果exist_ok
为True
,则目标目录已存在时不会抛出异常。os.removedirs(name)
: 递归地删除目录,但只有当目录为空时才会成功。os.mkdir(path, mode=0o777)
: 创建单个目录。os.rmdir(path)
: 删除单个空目录。os.remove(path)
: 删除文件。os.rename(src, dst)
: 重命名文件或目录。
1.2、检查文件和目录
os.path.exists(path)
: 检查路径是否存在。os.path.isdir(path)
: 检查路径是否为目录。os.path.isfile(path)
: 检查路径是否为文件。os.path.islink(path)
: 检查路径是否为链接(在 Unix 系统上有效)。os.path.ismount(path)
: 检查路径是否为挂载点(在 Unix 系统上有效)。
1.3、遍历目录
os.listdir(path='.')
: 返回指定目录下的所有文件和目录名。os.scandir(path='.')
: 返回一个包含os.DirEntry
对象的迭代器,这些对象提供了有关目录条目的信息(Python 3.5+)。
示例
import os
# 检查文件是否存在
if os.path.exists('example.txt'):
print('文件存在')
# 创建目录
os.makedirs('new_directory/sub_directory', exist_ok=True)
# 列出目录内容
print(os.listdir('.'))
# 改变当前工作目录
os.chdir('new_directory')
print('当前工作目录:', os.getcwd())
# 删除文件
os.remove('example.txt')
# 删除目录
os.removedirs('sub_directory')
二. 文件路径操作
os.path.join(path, *paths)
: 将多个路径组件合并成一个路径。os.path.abspath(path)
: 返回路径的绝对形式。os.path.relpath(path, start='.')
: 返回从start
到path
的相对路径。os.path.normpath(path)
: 规范化路径字符串,将冗余的分隔符、父目录引用(..
)和当前目录引用(.
)转换为标准形式。os.path.split(path)
: 将路径分割为目录和文件名。os.path.splitext(path)
: 将路径分割为文件名和扩展名。os.path.basename(path)
: 返回路径中的文件名。os.path.dirname(path)
: 返回路径中的目录名。os.path.commonprefix(list)
: 返回列表(路径字符串的列表)中所有路径的公共前缀。os.path.realpath(path)
: 返回指定文件或目录的绝对路径,解析所有符号链接、冗余名称元素和相对路径引用。
示例
import os
# 合并路径
full_path = os.path.join('parent_directory', 'sub_directory', 'file.txt')
print('合并后的路径:', full_path)
# 获取绝对路径
abs_path = os.path.abspath('.')
print('绝对路径:', abs_path)
# 获取文件名
file_name = os.path.basename(full_path)
print('文件名:', file_name)
# 判断是否为目录
print('是否为目录:', os.path.isdir('new_directory'))
三、文件和目录的权限与时间戳
os.chmod(path, mode)
: 更改文件或目录的权限。os.chown(path, uid, gid)
: 更改文件或目录的所有者和组(在 Unix 系统上有效)。os.utime(path, times=None, *, ns=None, dir_fd=None, follow_symlinks=True)
: 更新文件或目录的访问和修改时间。
四. 环境变量和进程管理
- os.environ: 获取或设置环境变量。
- os.system(command): 在子终端执行系统命令(不推荐用于生产环境,因为它存在安全风险)。
- os.spawn*() 和 os.fork(): 创建新的进程(
os.fork()
仅在 Unix 系统上可用)。 - os.exec*(): 执行一个新的程序,替换当前进程。
- os.getpid(): 获取当前进程 ID。
- os.getppid(): 获取父进程 ID(仅在 Unix 系统上可用)。
示例
import os
# 获取环境变量
print('PATH:', os.environ.get('PATH'))
# 设置环境变量
os.environ['MY_VAR'] = 'my_value'
print('MY_VAR:', os.environ.get('MY_VAR'))
# 在子终端执行命令
os.system('echo Hello, World!')
五、 操作系统接口
os.name
: 返回操作系统的名称(如'posix'
,'nt'
,'java'
,'ce'
)。os.uname()
: 返回识别当前操作系统的信息(在 Unix 系统上有效)。os.urandom(size)
: 返回大小为size
的随机字节串,适合用于加密应用。
六. 错误处理
OSError
: 这是一个异常类,当os
模块函数遇到操作系统错误时会被引发。
七、示例
import os
# 创建目录
os.makedirs('example_dir/subdir', exist_ok=True)
# 列出目录内容
print(os.listdir('example_dir'))
# 更改当前工作目录
os.chdir('example_dir')
# 检查当前工作目录
print('当前工作目录:', os.getcwd())
# 创建文件
with open('example.txt', 'w') as f:
f.write('Hello, World!')
# 获取文件的绝对路径
abs_path = os.path.abspath('example.txt')
print('文件的绝对路径:', abs_path)
# 删除文件
os.remove('example.txt')
# 删除目录(如果为空)
os.rmdir('subdir')
# 或者使用 os.removedirs('example_dir/subdir') 如果需要递归删除非空目录(但上面已经删除了 subdir)
# 设置环境变量
os.environ['MY_VAR'] = 'my_value'
print('MY_VAR:', os.environ.get('MY_VAR'))
# 获取进程 ID
print('当前进程 ID:', os.getpid())
八、注意事项
- 使用
os.system()
执行系统命令时,要非常小心,特别是当命令包含来自不可信来源的输入时,因为这可能导致安全漏洞(如命令注入)。 - 对于跨平台开发,要注意某些
os
模块函数可能在特定操作系统上不可用或表现不同。
os
模块提供了丰富的功能,使得 Python 程序能够与操作系统进行深入的交互。通过合理使用这些功能,可以大大增强程序的灵活性和功能。