Python中级教程第二课 文件处理专家 2/2

浏览量:11 次 发布时间:2026-01-15 18:05 作者:明扬工控商城 下载docx

最近更新:Python中级教程 第三课:面向对象编程深入与装饰器

第五部分 实战项目 自动整理桌面文件工具

现在让我们把今天学到的知识用起来,做一个实用的工具:自动整理桌面文件工具。


代码部分:

自动整理桌面文件工具

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模块的高级用法


实战项目:网页数据提取器


你已经掌握了文件处理的重要技能,这些技能在日常工作和学习中非常实用。继续加油,我们下节课再见!


记住:文件处理是自动化办公的基础,掌握这些技能能大大提高你的工作效率!


明扬工控商城

推荐阅读:

Python中级教程 第六课:高级特性与性能优化 2/2

Python中级教程 第六课:高级特性与性能优化 1/2

Python中级教程 第五课:异步编程与并发 2/2

Python中级教程 第五课:异步编程与并发 1/2

Python中级教程 第四课:上下文管理器、生成器与迭代器

Python中级教程 第三课:面向对象编程深入与装饰器

热门标签:
Python中级教程第二课 文件处理专家 2/2.docx

将本文的Word文档下载到电脑

推荐度:

下载

全部评论

请登录
产业新闻-明扬资讯网
科技资讯-明扬资讯网