您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Python的os模块怎么使用
## 一、os模块概述
`os`模块是Python标准库中用于与操作系统进行交互的核心模块之一。它提供了丰富的函数来执行文件和目录操作、进程管理、环境变量访问等系统级功能。作为跨平台模块,`os`能在Windows、Linux和macOS等不同操作系统上保持一致的接口。
### 主要功能分类
1. **文件和目录操作**:创建/删除/重命名文件、目录遍历等
2. **路径操作**:路径拼接、拆分、规范化等
3. **进程管理**:启动新进程、获取进程ID等
4. **环境变量访问**:读取和修改系统环境变量
5. **系统信息获取**:获取平台信息、用户数据等
## 二、基础文件操作
### 1. 文件与目录的基本操作
```python
import os
# 创建目录(单级)
os.mkdir('new_dir')
# 创建多级目录
os.makedirs('parent_dir/child_dir/grandchild_dir')
# 删除文件
os.remove('file.txt')
# 删除空目录
os.rmdir('empty_dir')
# 递归删除目录及其内容(类似rm -rf)
import shutil
shutil.rmtree('directory')
# 文件重命名
os.rename('old.txt', 'new.txt')
# 文件移动(跨目录重命名)
os.rename('source/file.txt', 'destination/file.txt')
# 检查文件/目录是否存在
if os.path.exists('file.txt'):
print("文件存在")
# 检查是否为文件
os.path.isfile('file.txt')
# 检查是否为目录
os.path.isdir('directory')
# 获取文件大小(字节)
size = os.path.getsize('file.txt')
os.path
子模块专门处理路径相关操作,是跨平台开发的关键工具。
# 安全路径拼接(自动处理分隔符)
full_path = os.path.join('dir', 'subdir', 'file.txt')
# 拆分路径
dirname, filename = os.path.split('/path/to/file.txt')
# dirname → '/path/to'
# filename → 'file.txt'
# 获取文件扩展名
ext = os.path.splitext('image.jpg')[1] # → '.jpg'
# 规范化路径(处理./、../等)
clean_path = os.path.normpath('/a/b/../c/./d') # → '/a/c/d'
# 转换为绝对路径
abs_path = os.path.abspath('../file.txt')
# 解析符号链接
real_path = os.path.realpath('/usr/bin/python3')
# 列出目录内容(不包括子目录)
entries = os.listdir('/path/to/dir')
# 获取包含完整路径的列表
full_entries = [os.path.join('/path/to/dir', f) for f in os.listdir('/path/to/dir')]
# 使用os.walk()递归遍历
for root, dirs, files in os.walk('/path/to/start'):
print(f"当前目录: {root}")
print(f"子目录: {dirs}")
print(f"文件: {files}")
print("---")
# 查找特定扩展名的文件
py_files = [f for f in os.listdir('.')
if os.path.isfile(f) and f.endswith('.py')]
# 使用glob模块更强大的模式匹配
import glob
all_py_files = glob.glob('**/*.py', recursive=True)
# 获取当前进程ID
pid = os.getpid()
# 获取父进程ID
ppid = os.getppid()
# 执行系统命令(阻塞式)
return_code = os.system('ls -l')
# 更强大的subprocess模块
import subprocess
subprocess.run(['ls', '-l'])
# 获取操作系统类型
os_name = os.name # 'posix'(Linux/Mac)或'nt'(Windows)
# 获取环境变量
path = os.getenv('PATH')
# 设置环境变量(仅当前进程)
os.environ['MY_VAR'] = 'value'
# 获取用户信息
username = os.getlogin()
home_dir = os.path.expanduser('~')
# 低级文件操作
fd = os.open('file.txt', os.O_RDONLY)
data = os.read(fd, 1024)
os.close(fd)
# 修改文件权限(Unix-like系统)
os.chmod('script.sh', 0o755) # rwxr-xr-x
# 获取文件状态信息
stat_info = os.stat('file.txt')
print(f"最后修改时间: {stat_info.st_mtime}")
print(f"文件所有者UID: {stat_info.st_uid}")
# 创建临时文件
import tempfile
temp_file = tempfile.NamedTemporaryFile(delete=False)
print(f"临时文件路径: {temp_file.name}")
temp_file.close()
os.unlink(temp_file.name) # 手动删除
# 正确的跨平台路径构建方式
config_path = os.path.join('config', 'settings.ini')
# 避免硬编码分隔符
# 错误示例: path = 'config\settings.ini' # Windows反斜杠
# 写入文件时统一换行符
with open('output.txt', 'w', newline='\n') as f:
f.write('第一行\n第二行\n')
# 获取系统特定目录
if os.name == 'nt': # Windows
appdata = os.getenv('APPDATA')
else: # Unix-like
appdata = os.path.expanduser('~/.config')
def batch_rename(directory, prefix):
"""为目录下所有文件添加前缀"""
for filename in os.listdir(directory):
if os.path.isfile(os.path.join(directory, filename)):
new_name = f"{prefix}{filename}"
os.rename(
os.path.join(directory, filename),
os.path.join(directory, new_name)
)
print(f"重命名完成,共处理{len(os.listdir(directory))}个文件")
# 使用示例
batch_rename('./photos', 'vacation_')
def get_dir_size(start_path):
"""递归计算目录总大小"""
total_size = 0
for dirpath, dirnames, filenames in os.walk(start_path):
for f in filenames:
fp = os.path.join(dirpath, f)
total_size += os.path.getsize(fp)
return total_size
# 转换为人类可读格式
def sizeof_fmt(num, suffix='B'):
for unit in ['','K','M','G','T','P']:
if abs(num) < 1024.0:
return f"{num:3.1f}{unit}{suffix}"
num /= 1024.0
return f"{num:.1f}Yi{suffix}"
print(f"目录大小: {sizeof_fmt(get_dir_size('/path/to/dir'))}")
路径注入防护: “`python
user_input = ‘malicious/../../etc/passwd’ full_path = ‘/data/’ + user_input
# 安全方式 full_path = os.path.abspath(os.path.join(‘/data’, user_input)) if not full_path.startswith(‘/data’): raise ValueError(“非法路径访问”)
2. **权限最小化原则**:
- 避免使用root权限运行脚本
- 使用`0o`前缀明确设置八进制权限
3. **异常处理**:
```python
try:
os.remove('important_file')
except FileNotFoundError:
print("文件不存在,跳过删除")
except PermissionError:
print("权限不足,无法删除文件")
批量操作:
os.path.exists()
检查使用scandir()替代listdir():
# Python 3.5+ 更高效的目录遍历
with os.scandir('/path') as entries:
for entry in entries:
if entry.is_file():
print(entry.name, entry.stat().st_size)
延迟加载:
# 仅在需要时导入
def get_file_size(path):
import os
return os.path.getsize(path)
os
模块是Python系统编程的基石,本文涵盖了其80%的常用功能。要深入掌握:
推荐扩展学习:
shutil
模块:高级文件操作pathlib
模块(Python 3.4+):面向对象的路径操作subprocess
模块:更强大的进程管理最佳实践:
os.path
处理路径,不要手动拼接字符串调试技巧:
# 打印详细的路径解析过程
print(f"输入路径: {user_path}")
print(f"绝对路径: {os.path.abspath(user_path)}")
print(f"规范化路径: {os.path.normpath(user_path)}")
通过灵活运用os
模块,你可以轻松实现各种系统级操作,构建强大的文件管理工具和系统实用程序。
“`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。