1. 为什么需要掌握Python文件与目录操作?
在日常开发中,文件系统操作是每个Python程序员都无法回避的基础技能。无论是数据分析师需要遍历目录读取CSV文件,还是后端开发者需要管理上传的图片资源,亦或是自动化脚本需要清理临时目录,文件操作都扮演着关键角色。
Python提供了三种主流方式来处理文件和目录:
- 传统的os模块
- 面向对象的pathlib模块(Python 3.4+)
- 高级文件操作shutil模块
我曾在多个项目中因为不熟悉这些工具的特性而踩过坑。比如用os.listdir()遍历目录时遇到中文路径报错,或者用shutil.copy时不小心覆盖了重要文件。本文将结合这些实战经验,带你系统掌握Python文件操作的正确姿势。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础操作:使用os模块进行文件系统交互
2.1 路径操作与目录遍历
os模块是Python与操作系统交互的桥梁,提供了一系列底层文件操作方法。让我们从最常用的路径处理开始:
python复制import os
# 获取当前工作目录
current_dir = os.getcwd()
print(f"当前目录:{current_dir}")
# 路径拼接(避免直接使用字符串拼接)
file_path = os.path.join('data', 'reports', '2023.csv')
print(f"完整路径:{file_path}")
# 路径标准化(处理../和./)
normalized_path = os.path.normpath('/var/www/../tmp/./file.txt')
print(f"标准化路径:{normalized_path}") # 输出:/tmp/file.txt
注意:在Windows系统上路径分隔符是反斜杠(),而Linux/macOS使用正斜杠(/)。使用os.path.join()可以自动处理这种差异,使代码具有跨平台性。
目录遍历是常见需求,但有几个易错点需要注意:
python复制# 遍历目录(返回相对路径)
for root, dirs, files in os.walk('project'):
print(f"当前目录:{root}")
print(f"包含子目录:{dirs}")
print(f"包含文件:{files}")
print("-" * 40)
# 常见问题:中文路径处理
try:
os.listdir('中文目录') # 可能报UnicodeDecodeError
except UnicodeDecodeError:
# 解决方案:指定编码或使用pathlib
pass
2.2 文件属性与权限管理
了解文件属性对于编写健壮的脚本至关重要:
python复制# 检查文件/目录是否存在
if os.path.exists('config.ini'):
print("配置文件存在")
# 获取文件大小(字节)
file_size = os.path.getsize('data.db')
print(f"文件大小:{file_size/1024:.2f} KB")
# 修改文件权限(Linux/macOS)
os.chmod('script.sh', 0o755) # rwxr-xr-x
# 获取文件最后修改时间(返回时间戳)
mtime = os.path.getmtime('log.txt')
from datetime import datetime
print(f"最后修改:{datetime.fromtimestamp(mtime)}")
在实际项目中,我曾遇到一个坑:使用os.path.getsize()检查文件后立即读取,结果文件被其他进程修改导致读取异常。解决方案是添加异常处理或使用文件锁。
3. 现代路径操作:pathlib模块详解
3.1 Path对象的核心优势
pathlib是Python
