最近更新:Python中级教程 第六课:高级特性与性能优化 1/2
2026-01-15
最近更新:Python中级教程 第五课:异步编程与并发 2/2
2026-01-15
最近更新:Python中级教程 第五课:异步编程与并发 1/2
2026-01-15
最近更新:Python中级教程 第四课:上下文管理器、生成器与迭代器
2026-01-15
最近更新:Python中级教程 第三课:面向对象编程深入与装饰器
2026-01-15
浏览量:11 次 发布时间:2026-01-15 18:05 作者:明扬工控商城 下载docx
最近更新:Python中级教程 第六课:高级特性与性能优化 1/2
2026-01-15
最近更新:Python中级教程 第五课:异步编程与并发 2/2
2026-01-15
最近更新:Python中级教程 第五课:异步编程与并发 1/2
2026-01-15
最近更新:Python中级教程 第四课:上下文管理器、生成器与迭代器
2026-01-15
最近更新:Python中级教程 第三课:面向对象编程深入与装饰器
2026-01-15
第五部分 实战项目 自动整理桌面文件工具
现在让我们把今天学到的知识用起来,做一个实用的工具:自动整理桌面文件工具。
代码部分:
自动整理桌面文件工具
import os
import shutil
import json
from datetime import datetime
class 桌面文件整理器:
def init(self, 桌面路径=None):
如果未指定桌面路径,尝试自动获取
if 桌面路径 is None:
if os.name == "nt": Windows系统
self.桌面路径 = os.path.join(os.environ["USERPROFILE"], "Desktop")
else: Mac或Linux系统
self.桌面路径 = os.path.join(os.path.expanduser("~"), "Desktop")
else:
self.桌面路径 = 桌面路径
text
self.整理规则 = self.加载整理规则()
def 加载整理规则(self, 规则文件="整理规则.json"):
加载整理规则,如果文件不存在则使用默认规则
if os.path.exists(规则文件):
try:
with open(规则文件, "r", encoding="utf-8") as f:
return json.load(f)
except Exception as e:
print(f"加载整理规则失败:{e}")
return self.获取默认规则()
else:
print("整理规则文件不存在,使用默认规则")
return self.获取默认规则()
def 获取默认规则(self):
返回默认整理规则
return {
"文件夹映射": {
"图片": [".jpg", ".jpeg", ".png", ".gif", ".bmp", ".svg"],
"文档": [".pdf", ".doc", ".docx", ".txt", ".xlsx", ".xls", ".ppt", ".pptx"],
"压缩包": [".zip", ".rar", ".7z", ".tar", ".gz"],
"程序": [".exe", ".msi", ".bat", ".sh"],
"代码": [".py", ".java", ".cpp", ".c", ".js", ".html", ".css"],
"音频": [".mp3", ".wav", ".flac"],
"视频": [".mp4", ".avi", ".mov", ".mkv"]
},
"其他选项": {
"按日期整理": True,
"处理重复文件": True,
"备份原始文件": False
}
}
def 保存整理规则(self, 规则文件="整理规则.json"):
保存整理规则到文件
try:
with open(规则文件, "w", encoding="utf-8") as f:
json.dump(self.整理规则, f, ensure_ascii=False, indent=2)
print(f"整理规则已保存到:{规则文件}")
return True
except Exception as e:
print(f"保存整理规则失败:{e}")
return False
def 扫描桌面文件(self):
扫描桌面上的所有文件
if not os.path.exists(self.桌面路径):
print(f"桌面路径不存在:{self.桌面路径}")
return []
所有文件 = []
for 文件名 in os.listdir(self.桌面路径):
文件路径 = os.path.join(self.桌面路径, 文件名)
if os.path.isfile(文件路径):
文件信息 = {
"文件名": 文件名,
"文件路径": 文件路径,
"文件大小": os.path.getsize(文件路径),
"修改时间": datetime.fromtimestamp(os.path.getmtime(文件路径)),
"扩展名": os.path.splitext(文件名)[1].lower()
}
所有文件.append(文件信息)
print(f"扫描到 {len(所有文件)} 个文件")
return 所有文件
def 获取目标文件夹(self, 文件信息):
根据文件扩展名确定目标文件夹
扩展名 = 文件信息["扩展名"]
文件夹映射 = self.整理规则["文件夹映射"]
for 文件夹, 扩展名列表 in 文件夹映射.items():
if 扩展名 in 扩展名列表:
return 文件夹
return "其他"
def 处理重复文件(self, 目标路径, 文件名):
处理重复文件名
如果文件已存在,添加数字后缀
基本名, 扩展名 = os.path.splitext(文件名)
新路径 = 目标路径
计数器 = 1
while os.path.exists(新路径):
新文件名 = f"{基本名}_{计数器}{扩展名}"
新路径 = os.path.join(os.path.dirname(目标路径), 新文件名)
计数器 += 1
return 新路径
def 整理文件(self):
整理桌面文件
扫描文件
文件列表 = self.扫描桌面文件()
if not 文件列表:
print("桌面没有文件需要整理")
return
统计信息
统计 = {
"总文件数": len(文件列表),
"移动文件数": 0,
"按类型统计": {}
}
按扩展名分类
分类结果 = {}
for 文件信息 in 文件列表:
目标文件夹 = self.获取目标文件夹(文件信息)
if 目标文件夹 not in 分类结果:
分类结果[目标文件夹] = []
分类结果[目标文件夹].append(文件信息)
更新统计
if 目标文件夹 not in 统计["按类型统计"]:
统计["按类型统计"][目标文件夹] = 0
统计["按类型统计"][目标文件夹] += 1
创建目标文件夹并移动文件
for 文件夹, 文件列表 in 分类结果.items():
目标路径 = os.path.join(self.桌面路径, 文件夹)
如果文件夹不存在,创建它
if not os.path.exists(目标路径):
os.makedirs(目标路径)
print(f"创建文件夹:{文件夹}")
移动文件
for 文件信息 in 文件列表:
源路径 = 文件信息["文件路径"]
目标文件路径 = os.path.join(目标路径, 文件信息["文件名"])
处理重复文件
if self.整理规则["其他选项"]["处理重复文件"]:
目标文件路径 = self.处理重复文件(目标文件路径, 文件信息["文件名"])
try:
shutil.move(源路径, 目标文件路径)
统计["移动文件数"] += 1
print(f"移动:{文件信息['文件名']} -> {文件夹}/")
except Exception as e:
print(f"移动文件失败 {文件信息['文件名']}: {e}")
显示整理结果
self.显示整理结果(统计)
return 统计
def 显示整理结果(self, 统计信息):
显示整理结果
print("\n" + "=" * 50)
print("文件整理完成!")
print("=" * 50)
print(f"总文件数:{统计信息['总文件数']}")
print(f"移动文件数:{统计信息['移动文件数']}")
print("\n按类型统计:")
for 类型, 数量 in 统计信息["按类型统计"].items():
print(f" {类型:10} : {数量} 个文件")
未移动文件数 = 统计信息["总文件数"] - 统计信息["移动文件数"]
if 未移动文件数 > 0:
print(f"\n注意:有 {未移动文件数} 个文件未被移动")
print("=" * 50)
def 还原整理(self, 备份文件=None):
还原整理操作
if backup_file:
这里可以实现从备份恢复的逻辑
print("从备份恢复功能尚未实现")
return False
否则,尝试从各文件夹中移动文件回桌面
文件夹映射 = self.整理规则["文件夹映射"]
所有文件夹 = list(文件夹映射.keys()) + ["其他"]
移动回的文件数 = 0
for 文件夹 in 所有文件夹:
文件夹路径 = os.path.join(self.桌面路径, 文件夹)
if os.path.exists(文件夹路径) and os.path.isdir(文件夹路径):
for 文件名 in os.listdir(文件夹路径):
文件路径 = os.path.join(文件夹路径, 文件名)
目标路径 = os.path.join(self.桌面路径, 文件名)
try:
shutil.move(文件路径, 目标路径)
移动回的文件数 += 1
print(f"移动回:{文件名} -> 桌面")
except Exception as e:
print(f"移动文件失败 {文件名}: {e}")
如果文件夹为空,删除它
if not os.listdir(文件夹路径):
try:
os.rmdir(文件夹路径)
print(f"删除空文件夹:{文件夹}")
except Exception as e:
print(f"删除文件夹失败 {文件夹}: {e}")
print(f"\n已移动回 {移动回的文件数} 个文件到桌面")
return True
使用示例
def 演示文件整理():
print("桌面文件整理工具演示")
print("=" * 60)
text
创建整理器实例
整理器 = 桌面文件整理器()
print(f"桌面路径:{整理器.桌面路径}")
显示整理规则
print("\n当前整理规则:")
print(json.dumps(整理器.整理规则, ensure_ascii=False, indent=2))
由于这是演示,我们不实际执行整理操作
print("\n注意:这是演示,不会实际整理文件")
print("要实际使用,请取消下面代码的注释")
示例用法(取消注释以使用):
扫描文件
文件列表 = 整理器.扫描桌面文件()
for 文件 in 文件列表[:5]: 只显示前5个
print(f"文件:{文件['文件名']},大小:{文件['文件大小']}字节")
整理文件
整理器.整理文件()
还原整理
整理器.还原整理()
if name == "main":
演示文件整理()
第六部分 本课总结
今天学到了什么:
JSON文件处理:读写JSON文件、配置文件管理
Excel文件处理:创建、读取、处理Excel文件
PDF文件处理:提取文本、合并拆分PDF
实战项目:自动整理桌面文件工具
第三方库使用:openpyxl、PyPDF2等
实际应用场景:
配置文件管理:用JSON管理程序配置
数据分析:用Excel处理表格数据
文档处理:提取PDF信息,批量处理文档
文件整理:自动化整理电脑文件
办公自动化:批量处理办公文档
常见问题解答:
问题1:处理Excel时如何保留原有格式?
openpyxl可以读取和写入格式,但复杂格式可能无法完全保留
对于复杂格式,可以考虑使用其他库如xlrd和xlwt
问题2:PDF提取文本不准确怎么办?
PDF格式复杂,文本提取可能不完美
可以尝试其他库如pdfminer,或使用OCR技术处理扫描版PDF
问题3:处理大量文件时程序太慢怎么办?
可以使用多线程或多进程处理
先处理小批量文件测试,优化代码后再处理大量文件
练习任务:
任务1:创建个人财务管理系统
用JSON存储账户和分类信息
用Excel记录收支明细
生成月度财务报表(Excel格式)
自动计算支出分类统计
任务2:制作简历解析工具
从PDF简历中提取关键信息(姓名、联系方式、工作经历等)
将提取的信息保存为JSON格式
支持批量处理多个简历文件
生成人才数据库(Excel格式)
任务3:扩展文件整理工具
添加按日期整理功能(按年/月创建文件夹)
添加重复文件检测功能(根据内容而不是文件名)
添加文件类型统计图表(使用matplotlib)
添加定时自动整理功能
下节课预告:
下一课我们将学习正则表达式 文本处理魔法,内容包括:
正则表达式基础语法
常用匹配模式和技巧
re模块的高级用法
实战项目:网页数据提取器
你已经掌握了文件处理的重要技能,这些技能在日常工作和学习中非常实用。继续加油,我们下节课再见!
记住:文件处理是自动化办公的基础,掌握这些技能能大大提高你的工作效率!
将本文的Word文档下载到电脑
推荐度: