Python 的 os
模块提供了丰富的操作系统功能,可以用于与操作系统交互。它包括文件和目录操作、进程管理、环境变量处理等。
1. 导入 os
模块
在使用 os
模块之前,首先需要导入它:
import os
2. 文件与目录操作
2.1 获取当前工作目录
可以使用 os.getcwd()
获取当前的工作目录:
current_directory = os.getcwd()
print(f"当前工作目录: {current_directory}")
2.2 改变工作目录
使用 os.chdir(path)
可以更改当前工作目录:
os.chdir('/path/to/directory')
print(f"工作目录已更改为: {os.getcwd()}")
2.3 创建目录
os.makedirs(path)
可以递归地创建目录,即使中间的目录不存在也会一同创建:
os.makedirs('test_dir/sub_dir')
如果只想创建单个目录,可以使用 os.mkdir(path)
:
os.mkdir('single_dir')
2.4 删除目录
使用 os.rmdir(path)
删除单个空目录:
os.rmdir('single_dir')
如果想递归删除非空目录,使用 os.removedirs(path)
:
os.removedirs('test_dir/sub_dir')
注意:os.removedirs
会删除路径中所有空的父目录。
2.5 文件操作
2.5.1 创建文件
使用 open
函数可以创建文件:
with open('test_file.txt', 'w') as file:
file.write('Hello, World!')
2.5.2 删除文件
使用 os.remove(path)
可以删除文件:
os.remove('test_file.txt')
2.5.3 重命名文件或目录
使用 os.rename(src, dst)
可以重命名文件或目录:
os.rename('old_name.txt', 'new_name.txt')
2.5.4 获取文件或目录的状态
os.stat(path)
返回文件或目录的状态信息,如文件大小、创建时间等:
file_stat = os.stat('new_name.txt')
print(f"文件大小: {file_stat.st_size} bytes")
2.6 列出目录内容
使用 os.listdir(path)
可以列出目录下的所有文件和子目录:
files_and_dirs = os.listdir('.')
print(files_and_dirs)
如果需要递归列出所有文件,可以使用 os.walk
:
for root, dirs, files in os.walk('.'):
print(f"当前目录: {root}")
print(f"子目录: {dirs}")
print(f"文件: {files}")
3. 环境变量
3.1 获取环境变量
使用 os.getenv('VARIABLE_NAME')
获取环境变量的值:
path = os.getenv('PATH')
print(f"系统PATH变量: {path}")
3.2 设置环境变量
可以使用 os.environ['VARIABLE_NAME'] = 'value'
设置环境变量:
os.environ['MY_VARIABLE'] = 'my_value'
print(f"自定义环境变量: {os.getenv('MY_VARIABLE')}")
3.3 删除环境变量
使用 os.environ.pop('VARIABLE_NAME')
删除环境变量:
os.environ.pop('MY_VARIABLE')
4. 进程管理
4.1 执行系统命令
使用 os.system(command)
可以在 Python 中执行系统命令:
os.system('ls -l')
这个函数执行完命令后,会返回命令的退出状态码。注意:os.system
执行命令时会在子进程中运行,因此它不能直接获取命令的输出。
4.2 使用 os.popen
处理命令输出
os.popen(command)
可用于执行命令并获取其输出:
output = os.popen('ls -l').read()
print(output)
4.3 获取当前进程的 ID
使用 os.getpid()
可以获取当前进程的 ID:
pid = os.getpid()
print(f"当前进程 ID: {pid}")
4.4 获取父进程 ID
使用 os.getppid()
可以获取父进程的 ID:
ppid = os.getppid()
print(f"父进程 ID: {ppid}")
4.5 创建子进程
使用 os.fork()
可以创建一个子进程(仅在 UNIX 系统上可用):
pid = os.fork()
if pid == 0:
print("这是子进程")
else:
print(f"这是父进程,子进程 ID: {pid}")
4.6 进程终止
使用 os.kill(pid, signal)
可以向进程发送信号,如终止进程:
import signal
os.kill(pid, signal.SIGTERM)
5. 文件描述符操作
os
模块还提供了低级别的文件描述符操作,这些操作通常用于更底层的文件处理。
5.1 打开文件
使用 os.open(path, flags)
以指定的标志打开文件,并返回文件描述符:
fd = os.open('test_file.txt', os.O_RDWR | os.O_CREAT)
5.2 读取文件
使用 os.read(fd, n)
从文件描述符中读取 n
个字节:
content = os.read(fd, 100)
print(content)
5.3 写入文件
使用 os.write(fd, str)
向文件描述符写入数据:
os.write(fd, b"Hello, File Descriptor!")
5.4 关闭文件
使用 os.close(fd)
关闭文件描述符:
os.close(fd)
5.5 文件锁
文件锁对于并发访问文件的场景非常重要。可以使用 os.flock(fd, operation)
对文件进行加锁和解锁操作:
import fcntl
fd = os.open('test_file.txt', os.O_RDWR)
fcntl.flock(fd, fcntl.LOCK_EX)
# 文件锁定,可以执行文件操作
fcntl.flock(fd, fcntl.LOCK_UN)
# 解锁
os.close(fd)
6. 其他常用功能
6.1 获取文件或目录的绝对路径
使用 os.path.abspath(path)
可以获取文件或目录的绝对路径:
absolute_path = os.path.abspath('test_file.txt')
print(absolute_path)
6.2 判断路径是否存在
使用 os.path.exists(path)
判断路径是否存在:
exists = os.path.exists('test_file.txt')
print(f"文件存在: {exists}")
6.3 判断路径是否为目录
使用 os.path.isdir(path)
判断路径是否为目录:
is_dir = os.path.isdir('test_dir')
print(f"是否为目录: {is_dir}")
6.4 判断路径是否为文件
使用 os.path.isfile(path)
判断路径是否为文件:
is_file = os.path.isfile('test_file.txt')
print(f"是否为文件: {is_file}")
6.5 获取文件的大小
使用 os.path.getsize(path)
获取文件的大小(以字节为单位):
size = os.path.getsize('test_file.txt')
print(f"文件大小: {size} bytes")
6.6 获取文件的最后修改时间
使用 os.path.getmtime(path)
获取文件的最后修改时间(以时间戳表示):
import time
mod_time = os.path.getmtime('test_file.txt')
print(f"最后修改时间: {time.ctime(mod_time)}")
os
模块为 Python 提供了强大的与操作系统交互的能力,包括文件和目录操作、环境变量处理、进程管理等。在使用 os
模块时,必须注意跨平台兼容性,有些功能可能在不同的操作系统上表现不同。在编写 Python 程序时,充分利用 os
模块可以极大地增强程序的灵活性和功能性。