共计 2169 个字符,预计需要花费 6 分钟才能阅读完成。
欢迎来到 Python 基础入门 Day42!今天我们将一起探索一个非常实用且贴近实际工作的主题 —— Python 文件与目录操作进阶技巧 。文件管理在数据处理、自动化脚本、日志分析等场景中都至关重要。我们会涵盖以下内容:
目录
- 文件系统基础操作回顾
- 文件批量重命名与移动
- 文件内容批处理(查找、替换、汇总)
- 自动化日志处理实战案例
- 小结与练习
一、文件系统基础操作回顾
Python 中常用 os 和 pathlib 两个模块处理文件系统:
示例:列出当前目录下所有文件
import os
files = os.listdir('.')
for f in files:
print(f)
或者使用 pathlib 更现代的方式:
from pathlib import Path
path = Path('.')
for file in path.iterdir():
print(file.name)
二、文件批量重命名与移动
2.1 批量重命名文件
将目录中所有 .txt 文件统一重命名为 file_001.txt、file_002.txt…
import os
folder = 'text_files'
files = [f for f in os.listdir(folder) if f.endswith('.txt')]
for i, filename in enumerate(files, start=1):
src = os.path.join(folder, filename)
dst = os.path.join(folder, f'file_{i:03}.txt')
os.rename(src, dst)
2.2 批量移动文件
import shutil
source = 'text_files'
destination = 'backup/'
os.makedirs(destination, exist_ok=True)
for f in os.listdir(source):
if f.endswith('.txt'):
shutil.move(os.path.join(source, f), os.path.join(destination, f))
三、文件内容批处理
3.1 替换文件中的内容
在多个文件中,将某关键词全部替换成另一个:
folder = 'logs'
for filename in os.listdir(folder):
if filename.endswith('.log'):
filepath = os.path.join(folder, filename)
with open(filepath, 'r', encoding='utf-8') as file:
content = file.read()
content = content.replace('ERROR', 'WARNING')
with open(filepath, 'w', encoding='utf-8') as file:
file.write(content)
3.2 汇总多个文件内容
将所有 .txt 文件内容合并到一个新文件中:
output = open('merged_output.txt', 'w', encoding='utf-8')
for filename in os.listdir('text_files'):
if filename.endswith('.txt'):
with open(os.path.join('text_files', filename), 'r', encoding='utf-8') as f:
output.write(f.read() + '\n\n')
output.close()
四、自动化日志处理实战案例
假设你有一个目录 /logs,里面每天生成一个日志文件。我们将编写一个脚本,自动:
- 提取每个文件中的错误信息
- 汇总并生成一份
error_report.txt
import os
from datetime import datetime
log_dir = 'logs'
error_report = []
for filename in os.listdir(log_dir):
if filename.endswith('.log'):
with open(os.path.join(log_dir, filename), 'r', encoding='utf-8') as file:
for line in file:
if 'ERROR' in line:
error_report.append(f"{filename}: {line.strip()}")
# 输出错误报告
with open('error_report.txt', 'w', encoding='utf-8') as report:
report.write(f"Error Report generated at {datetime.now()}\n\n")
for line in error_report:
report.write(line + '\n')
五、小结与练习
✅ 今日学习内容:
- 熟悉了
os与pathlib的使用 - 掌握了批量重命名、移动文件的方法
- 学会了批量读取、替换和汇总文件内容
- 编写了一个自动化日志处理的实用脚本
💡 今日练习:
- 将某个目录下所有
.csv文件批量重命名并移动到新目录中。 - 编写脚本统计一个目录下所有文本文件的总行数与平均长度。
- 从多个日志文件中提取包含关键字
CRITICAL的行,输出到一个新文件中。 - 尝试将这些操作封装成函数,并通过参数控制路径和关键词。
正文完