十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Python文件操作:os、pathlib与shutil模块详解

Python文件操作:os、pathlib与shutil模块详解 1. Python文件操作基础与模块选择在Python中处理文件和目录是每个开发者必备的基础技能。无论是数据分析、自动化脚本还是Web应用开发都离不开对文件系统的操作。Python提供了三个核心模块来满足不同场景下的需求os模块这是最基础的文件操作系统接口提供了跨平台的文件和目录操作方法pathlib模块Python 3.4采用面向对象的方式处理文件路径shutil模块提供高级文件操作功能如复制、移动、归档等实际项目中我通常会根据Python版本和操作复杂度来选择合适的工具组合。对于新项目pathlib往往是首选而需要兼容旧代码时则多用os模块。2. os模块深度解析2.1 基础路径操作os模块中最常用的函数包括import os # 获取当前工作目录 current_dir os.getcwd() # 路径拼接跨平台兼容 file_path os.path.join(data, logs, app.log) # 检查路径存在性 if os.path.exists(file_path): print(f文件存在大小{os.path.getsize(file_path)}字节)注意os.path.join()比直接拼接字符串更可靠特别是在Windows和Linux跨平台场景下。2.2 目录遍历与文件查找# 列出目录内容 for item in os.listdir(.): print(item) # 递归遍历目录Python 3.5 for root, dirs, files in os.walk(project): print(f当前目录{root}) print(f包含子目录{dirs}) print(f包含文件{files})常见问题遇到权限不足的目录时walk会抛出异常建议添加异常处理大目录遍历可能耗时考虑使用生成器表达式优化内存3. pathlib的现代化路径操作3.1 Path对象基础用法from pathlib import Path # 创建Path对象 config_file Path(config) / settings.ini # 常用操作 if config_file.exists(): content config_file.read_text() new_file config_file.with_suffix(.bak) new_file.write_text(content)3.2 路径属性与方法p Path(/var/log/app.log) print(p.name) # app.log print(p.stem) # app print(p.suffix) # .log print(p.parent) # /var/log print(p.parts) # (/, var, log, app.log) # 通配符查找 for py_file in Path.cwd().glob(*.py): print(py_file)经验分享pathlib的链式调用让代码更简洁但要注意每次操作都会返回新对象。4. shutil高级文件操作4.1 文件复制与移动import shutil # 复制文件 shutil.copy(source.txt, backup.txt) # 复制目录递归 shutil.copytree(src_dir, dst_dir) # 移动文件/目录 shutil.move(old_pos, new_pos)4.2 归档操作# 创建zip压缩包 shutil.make_archive(backup, zip, data_folder) # 解压文件 shutil.unpack_archive(package.zip, extract_dir)性能提示大文件操作时shutil.copy2()比copy()保留了更多元数据跨设备移动文件可能实际是复制删除操作5. 综合应用与性能优化5.1 文件操作最佳实践def backup_project(project_dir, backup_dir): backup_dir Path(backup_dir) / fbackup_{datetime.now().strftime(%Y%m%d)} try: shutil.copytree( project_dir, backup_dir, ignoreshutil.ignore_patterns(*.tmp, __pycache__) ) except shutil.Error as e: print(f备份过程中出错{e}) for src, dst, err in e.args[0]: print(f无法复制 {src} 到 {dst}: {err})5.2 常见问题排查权限问题检查文件可读/写权限os.access(path, os.R_OK|os.W_OK)Linux下注意SELinux上下文路径编码问题# 处理特殊字符路径 path Path(包含中文的目录) encoded_path str(path.encode(utf-8))[2:-1]跨平台兼容性使用os.path.sep代替硬编码的分隔符注意Windows最大路径长度限制260字符6. 实战案例日志文件清理工具from pathlib import Path import time def clean_logs(log_dir, max_age30, max_files100): log_dir Path(log_dir) now time.time() # 按修改时间排序 log_files sorted(log_dir.glob(*.log), keylambda f: f.stat().st_mtime) # 删除过期文件 for log in log_files: if (now - log.stat().st_mtime) max_age * 86400: log.unlink() # 保留最新max_files个文件 for old_log in log_files[:-max_files]: old_log.unlink()这个工具结合了pathlib的路径操作文件状态检查批量删除逻辑双重清理策略时间和数量在生产环境中使用时建议添加日志记录和软删除功能先移动到临时目录。
返回列表