营销型网站建设sempk,王也微信头像图片,网站开发的论文引言,辽宁专业模板网站建设公司文章目录 Python 目录操作详解一、目录操作基础模块二、使用 os 和 os.path 进行目录操作1. 基本目录操作2. 路径操作#xff08;os.path#xff09;3. 代码示例 三、使用 pathlib 进行目录操作#xff08;推荐#xff09;1. Path 对象基本操作2. 目录操作3. 代码示例 四、… 文章目录 Python 目录操作详解一、目录操作基础模块二、使用 os 和 os.path 进行目录操作1. 基本目录操作2. 路径操作os.path3. 代码示例 三、使用 pathlib 进行目录操作推荐1. Path 对象基本操作2. 目录操作3. 代码示例 四、目录遍历与搜索1. 递归遍历目录树2. 查找特定文件 五、目录与文件信息1. 获取详细信息2. 权限与属性 六、高级目录操作1. 目录比较与同步2. 临时目录 七、跨平台注意事项八、最佳实践总结 Python提供了多种模块进行目录操作主要包括os/os.path、pathlib和shutil。os模块提供传统方法如mkdir/listdir等pathlibPython3.4推荐采用面向对象方式操作路径而shutil支持高级目录操作。核心功能包括创建/删除目录mkdir/rmdir、路径拼接join/Path对象、遍历目录walk/iterdir、文件搜索glob/rglob以及获取目录信息stat。pathlib通过Path对象提供更直观的操作方式如使用/拼接路径、属性访问等 Python 目录操作详解
目录操作是文件系统管理的重要组成部分Python 提供了多种方式来处理目录。下面我将从基础到高级全面详细地讲解 Python 中的目录操作。
一、目录操作基础模块
Python 主要使用以下模块进行目录操作
os 模块传统的目录操作方法os.path 模块路径相关操作pathlib 模块Python 3.4面向对象的路径操作推荐shutil 模块高级文件和目录操作
[目录操作模块]
├── os/os.path (传统方法)
├── pathlib (现代面向对象方法)
└── shutil (高级操作)二、使用 os 和 os.path 进行目录操作
1. 基本目录操作
操作方法描述创建目录os.mkdir(path)创建单个目录递归创建os.makedirs(path)创建多级目录删除目录os.rmdir(path)删除空目录递归删除shutil.rmtree(path)删除目录及其内容列出目录os.listdir(path)返回目录内容列表当前目录os.getcwd()获取当前工作目录改变目录os.chdir(path)改变当前工作目录
2. 路径操作os.path
操作方法描述路径拼接os.path.join(a, b)拼接路径绝对路径os.path.abspath(path)获取绝对路径路径存在os.path.exists(path)检查路径是否存在是文件os.path.isfile(path)检查是否是文件是目录os.path.isdir(path)检查是否是目录路径分割os.path.split(path)分割为(目录, 文件名)扩展名os.path.splitext(path)分割为(路径, 扩展名)
3. 代码示例
import os
import shutil# 创建目录
if not os.path.exists(new_dir):os.mkdir(new_dir) # 创建单个目录os.makedirs(path/to/nested/dir) # 创建多级目录# 列出目录内容
print(os.listdir(.)) # 当前目录内容# 删除目录
os.rmdir(new_dir) # 只能删除空目录
shutil.rmtree(path) # 删除整个目录树# 路径操作示例
path os.path.join(dir, subdir, file.txt) # dir/subdir/file.txt
print(os.path.abspath(.)) # 当前目录的绝对路径
print(os.path.isdir(/path/to/dir)) # 检查是否是目录三、使用 pathlib 进行目录操作推荐
pathlib 是 Python 3.4 引入的面向对象的路径操作模块更加直观和安全。
1. Path 对象基本操作
操作方法/属性描述创建对象Path(path)创建Path对象路径拼接/ 运算符路径拼接获取父目录.parent父目录Path对象获取文件名.name文件名部分获取后缀.suffix文件扩展名无后缀名.stem不带扩展名的文件名判断存在.exists()路径是否存在是文件.is_file()是否是文件是目录.is_dir()是否是目录
2. 目录操作
操作方法描述创建目录.mkdir()创建目录删除目录.rmdir()删除空目录遍历目录.iterdir()生成目录内容通配查找.glob()模式匹配文件递归查找.rglob()递归模式匹配
3. 代码示例
from pathlib import Path# 创建Path对象
p Path(/home/user/documents) / report.txt # 使用/拼接路径
print(p) # /home/user/documents/report.txt# 路径属性
print(p.parent) # /home/user/documents
print(p.name) # report.txt
print(p.stem) # report
print(p.suffix) # .txt# 目录操作
new_dir Path(new_directory)
new_dir.mkdir(exist_okTrue) # 创建目录exist_okTrue避免已存在时报错# 遍历目录
for item in Path(.).iterdir(): # 当前目录内容print(item.name)# 模式匹配
for py_file in Path(.).glob(*.py): # 所有.py文件print(py_file)# 递归查找
for txt_file in Path(.).rglob(*.txt): # 所有子目录中的.txt文件print(txt_file)四、目录遍历与搜索
1. 递归遍历目录树
import os# 使用os.walk递归遍历
for root, dirs, files in os.walk(.):print(f当前目录: {root})print(f子目录: {dirs})print(f文件: {files})print(- * 40)# 使用pathlib的rglob
from pathlib import Pathfor path in Path(.).rglob(*):print(path)2. 查找特定文件
from pathlib import Path# 查找所有Python文件
py_files list(Path(.).glob(**/*.py)) # 方法1
py_files list(Path(.).rglob(*.py)) # 方法2# 查找最近修改的文件
from datetime import datetime, timedeltadef find_recent_files(directory, days7):cutoff datetime.now() - timedelta(daysdays)for item in Path(directory).rglob(*):if item.is_file() and datetime.fromtimestamp(item.stat().st_mtime) cutoff:yield itemfor recent_file in find_recent_files(.):print(recent_file)五、目录与文件信息
1. 获取详细信息
from pathlib import Path
import timep Path(example.txt)# 获取文件/目录信息
stat p.stat()
print(f大小: {stat.st_size} 字节) # 文件大小
print(f修改时间: {time.ctime(stat.st_mtime)}) # 最后修改时间
print(f创建时间: {time.ctime(stat.st_ctime)}) # 创建时间(Windows)
print(f访问时间: {time.ctime(stat.st_atime)}) # 最后访问时间# 获取目录占用空间
def get_dir_size(path):return sum(f.stat().st_size for f in Path(path).rglob(*) if f.is_file())print(f目录大小: {get_dir_size(.)} 字节)2. 权限与属性
import os
from pathlib import Path# 检查权限
print(os.access(file.txt, os.R_OK)) # 可读
print(os.access(file.txt, os.W_OK)) # 可写
print(os.access(file.txt, os.X_OK)) # 可执行# 修改权限 (Unix-like系统)
Path(script.sh).chmod(0o755) # rwxr-xr-x# 修改所有者 (Unix-like系统)
import pwd, grp
uid pwd.getpwnam(username).pw_uid
gid grp.getgrnam(groupname).gr_gid
os.chown(file.txt, uid, gid)六、高级目录操作
1. 目录比较与同步
from filecmp import dircmp# 比较两个目录
cmp dircmp(dir1, dir2)
cmp.report() # 打印比较结果# 获取差异详情
print(相同文件:, cmp.same_files)
print(dir1独有:, cmp.left_only)
print(dir2独有:, cmp.right_only)
print(差异文件:, cmp.diff_files)2. 临时目录
import tempfile# 创建临时目录
with tempfile.TemporaryDirectory() as tmpdir:print(f临时目录: {tmpdir})# 在此使用临时目录(Path(tmpdir) / tempfile.txt).write_text(临时内容)
# 退出with后自动删除# 不自动删除的临时目录
tmpdir tempfile.mkdtemp()
print(f临时目录: {tmpdir})
# 使用完后需要手动删除
import shutil
shutil.rmtree(tmpdir)七、跨平台注意事项 路径分隔符 Windows 使用 \Linux/macOS 使用 /推荐总是使用 /Python会自动转换或使用 os.path.join()/pathlib 路径大小写 Windows 路径不区分大小写Linux/macOS 区分大小写 符号链接 使用 os.path.islink() 或 Path.is_symlink() 检查os.readlink() 或 Path.readlink() 获取链接目标 隐藏文件 Unix-like 系统以 . 开头的文件是隐藏文件Windows 有隐藏属性
# 跨平台路径处理最佳实践
from pathlib import Path# 创建跨平台安全路径
config_path Path.home() / app / config.ini # 用户主目录下的app/config.ini# 处理隐藏文件
def list_all_files(path):return [p for p in Path(path).rglob(*) if not p.name.startswith(.)]八、最佳实践总结
优先使用 pathlib比 os.path 更现代、更安全处理异常检查目录是否存在或捕获异常递归操作谨慎特别是删除操作确保不会误删路径安全避免路径遍历漏洞不要直接使用用户输入拼接路径资源管理使用 with 语句管理临时目录
from pathlib import Path
import shutildef safe_copy(src, dst):安全复制文件防止路径遍历攻击src_path Path(src).resolve() # 解析为绝对路径dst_path Path(dst).resolve()# 检查src是否在允许的目录内allowed_dir Path(/allowed/directory).resolve()if not src_path.is_relative_to(allowed_dir):raise ValueError(源路径不在允许的目录内)# 确保目标目录存在dst_path.parent.mkdir(parentsTrue, exist_okTrue)# 执行复制shutil.copy(src_path, dst_path)通过以上详细讲解你应该对 Python 中的目录操作有了全面的了解。掌握这些知识将帮助你高效地处理文件系统中的各种任务