第2章:文件操作
一、导读
1.1 本章学习目标
第2章讲解 Python 的文件操作:文件读写、路径操作、文件夹遍历、文件备份。
本章核心学习目标:
- 掌握文件读写:open、read、write
- 理解 pathlib:现代路径操作
- 掌握文件夹遍历:os.walk、glob
- 实现文件备份脚本
1.2 为什么本章如此重要
文件操作是自动化脚本中最常见的任务。掌握文件操作能帮你自动处理大量文件。
1.3 核心问题引导
为什么应该总是用 with 语句打开文件?
pathlib 比 os.path 有什么优势?
如何递归遍历文件夹?
二、核心概念详解
2.1 文件读写
python
# 读取文件
with open('data.txt', 'r') as f:
content = f.read() # 全部内容
# lines = f.readlines() # 所有行
# for line in f: # 逐行
# 写入文件
with open('output.txt', 'w') as f:
f.write("Hello World\n")
f.writelines(["Line 1\n", "Line 2\n"])
# 追加
with open('log.txt', 'a') as f:
f.write("New entry\n")2.2 pathlib
python
from pathlib import Path
# 路径操作
p = Path('data/subdir/file.txt')
print(p.parent) # data/subdir
print(p.name) # file.txt
print(p.stem) # file
print(p.suffix) # .txt
# 路径拼接
base = Path('/home/user')
full_path = base / 'documents' / 'file.txt'
# 遍历目录
for item in Path('.').iterdir():
print(item)
# 递归遍历
for py_file in Path('.').rglob('*.py'):
print(py_file)
# glob 模式
for txt in Path('data').glob('*.txt'):
print(txt)
# 文件信息
p = Path('data.txt')
print(p.exists()) # True/False
print(p.is_file()) # True/False
print(p.stat().st_size) # 文件大小2.3 文件备份
python
import shutil
from pathlib import Path
from datetime import datetime
def backup_folder(source, backup_dir):
"""备份文件夹"""
source = Path(source)
backup_dir = Path(backup_dir)
timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
backup_name = f"{source.name}_{timestamp}"
backup_path = backup_dir / backup_name
shutil.copytree(source, backup_path)
print(f"Backed up to: {backup_path}")
return backup_path
# 使用
backup_folder('/home/user/documents', '/backup')三、实战案例
3.1 案例一:批量重命名文件
python
from pathlib import Path
import re
def batch_rename(directory, pattern, replacement):
"""批量重命名文件"""
dir_path = Path(directory)
renamed = 0
for file_path in dir_path.iterdir():
if file_path.is_file():
new_name = re.sub(pattern, replacement, file_path.name)
if new_name != file_path.name:
new_path = file_path.with_name(new_name)
file_path.rename(new_path)
print(f"{file_path.name} → {new_name}")
renamed += 1
print(f"Renamed {renamed} files")
# 将所有空格替换为下划线
batch_rename('./photos', r'\s+', '_')四、本章小结
with 语句保证文件正确关闭
pathlib 提供面向对象的路径操作
shutil 支持文件和目录的复制、移动、删除
五、思考与练习
如何安全地删除文件(移到回收站而非直接删除)?
如何实现文件的增量备份?