设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间01 现在时间01 缓存数据 轻轻的闭上眼睛,慢慢的酝酿心情,将白天所有烦恼不快撒向天空,随着流星的坠落一起沉淀,愿今夜有个好梦,晚安!

轻轻的闭上眼睛,慢慢的酝酿心情,将白天所有烦恼不快撒向天空,随着流星的坠落一起沉淀,愿今夜有个好梦,晚安!

查看: 674|回复: 0

Python实现自动化整理文件的示例代码

[复制链接]

  离线 

TA的专栏

  • 打卡等级:热心大叔
  • 打卡总天数:204
  • 打卡月天数:0
  • 打卡总奖励:3291
  • 最近打卡:2023-08-27 07:22:33
等级头衔

等級:晓枫资讯-上等兵

在线时间
0 小时

积分成就
威望
0
贡献
427
主题
403
精华
0
金钱
4546
积分
854
注册时间
2022-12-24
最后登录
2025-6-1

发表于 2023-2-10 22:47:22 | 显示全部楼层 |阅读模式
自动化整理计算机文件

通过Python编程完成文件的自动分类、文件和文件夹的快速查找、重复文件的清理、图片格式的转换等常见工作。

1. 文件的自动分类

根据文件的扩展名将文件分类整理到不同文件夹中。
使用os和shutil模块
os模块提供了许多操作文件和文件夹的函数,可对文件或文件夹进行新建、删除、查看属性以及查找路径等操作。
shutil模块提供的函数可对文件或文件夹进行移动、复制、压缩等操作。
  1. """
  2. os模块提供了许多操作文件和文件夹的函数,可对文件或文件夹进行新建、删除、查看属性以及查找路径等操作。
  3. shutil模块提供的函数可对文件或文件夹进行移动、复制、压缩等操作。
  4. """
  5. import os
  6. import shutil

  7. # 源文件目录
  8. src_dir = "待分类文件/"
  9. # 输出文件的目录
  10. output_dir = '已分类文件/'
  11. files = os.listdir(src_dir)  # 列出src_dir目录下的所有文件及子文件夹的名称
  12. print(files)
  13. for f in files:
  14.     # 获得路径
  15.     src_path = src_dir + f
  16.     # 判断是否是文件
  17.     if os.path.isfile(src_path):
  18.         # 获取文件后缀,与输出目录拼接成输出文件夹路径
  19.         output_path = output_dir + f.split('.')[-1]
  20.         # 判断输出文件夹是否存在,若不存在则需要创建
  21.         if not os.path.exists(output_path):
  22.             os.mkdir(output_path)
  23.         # 将文件移动到输出目录中与其扩展名对应的文件夹中
  24.         shutil.move(src_path, output_path)
复制代码
测试文件:
234813aco50wjgfggf9z0l.jpeg

效果:
234814iyobgnz1cbfgbb9o.jpeg

使用pathlib模块
  1. from pathlib import Path

  2. # 源文件目录
  3. src_dir_name = "待分类文件/"
  4. # 输出文件的目录
  5. output_dir_name = '已分类文件/'

  6. # 使用Path()函数为源文件夹和目标文件夹创建路径对象
  7. src_dir = Path(src_dir_name)
  8. output_dir = Path(output_dir_name)

  9. # 在源文件夹下查找文件和子文件夹,*表示返回所有文件和子文件夹(完整路径)
  10. files = src_dir.glob('*')
  11. for f in files:
  12.     # 判断路径是否代表文件
  13.     if f.is_file():
  14.         # 获得输出文件夹路径
  15.         output_path = output_dir / f.suffix.strip('.')
  16.         # 判断输出文件夹是否存在
  17.         if not output_path.exists():
  18.             # 不存在则创建,parents为True表示创建多级文件夹
  19.             output_path.mkdir(parents=True)
  20.         # 将文件路径重命名为给定的路径,实现文件移动
  21.         f.replace(output_path / f.name)
复制代码
2. 文件和文件夹的快速查找

使用python编写快速查找文件和文件夹程序,实现精确查找和模糊查找。
精确查找文件和文件夹
  1. from pathlib import Path

  2. while True:
  3.     folder = input("请输入查找目录的路径(如:D:\\):")
  4.     folder = Path(folder.strip())  # 使用Path()函数创建路径对象
  5.     # 判断输入的路径是否存在,且是否为目录
  6.     if folder.exists() and folder.is_dir():
  7.         break
  8.     else:
  9.         print("输入的路径有误,请重新输入!")
  10. search_word = input("请输入要查找的文件或文件夹名称:").strip()  # 获得输入的文件或文件夹名称,去掉首尾空格
  11. """
  12. glob()函数和rglob()函数的区别:
  13. glob()函数和rglob()函数都能使用通配符在指定路径下查找文件和子文件夹。
  14. 区别在于:
  15.     glob()函数只进行以及查找,而rglob()函数会进行多级查找。
  16. """
  17. # 使用rglob()函数在用户输入的路径下查找名称与指定关键词完全相同的文件及字文件夹,并将结果转换成列表
  18. results = list(folder.rglob(pattern=search_word))
  19. if len(results) != 0:
  20.     print(f'在【{folder}】下查找到的结果如下:')
  21.     for r in results:
  22.         print(r)
  23. else:
  24.     print(f'在【{folder}】下未找到名为【{search_word}】的文件或文件夹!')
复制代码
效果:
234814asl3zsqu4smj7zrj.jpeg

模糊查找文件和文件夹
  1. # author:mlnt
  2. # createdate:2022/8/23
  3. from pathlib import Path

  4. while True:
  5.     folder = input("请输入查找目录的路径(如:D:\\):")
  6.     folder = Path(folder.strip())  # 使用Path()函数创建路径对象
  7.     # 判断输入的路径是否存在,且是否为目录
  8.     if folder.exists() and folder.is_dir():
  9.         break
  10.     else:
  11.         print("输入的路径有误,请重新输入!")
  12. search_word = input("请输入要查找的文件或文件夹名称:").strip()  # 获得输入的文件或文件夹名称,去掉首尾空格
  13. """
  14. glob()函数和rglob()函数的区别:
  15. glob()函数和rglob()函数都能使用通配符在指定路径下查找文件和子文件夹。
  16. 区别在于:
  17.     glob()函数只进行以及查找,而rglob()函数会进行多级查找。
  18. """
  19. # 使用rglob()函数在用户输入的路径下查找名称与指定关键词完全相同的文件及字文件夹,并将结果转换成列表
  20. results = list(folder.rglob(pattern=f'*{search_word}*'))
  21. if len(results) == 0:
  22.     print(f'在【{folder}】下未找到名称包含【{search_word}】的文件或文件夹!')
  23. else:
  24.     result_folders = []  # 查找到的与关键词相关的文件夹
  25.     result_files = []   # 与关键词相关的文件
  26.     for r in results:
  27.         if r.is_dir():
  28.             # 如果是目录(文件夹),则添加到文件夹列表
  29.             result_folders.append(r)
  30.         else:
  31.             result_files.append(r)
  32.     if len(result_folders) != 0:
  33.         print(f'在【{folder}】下查找到的与关键词{search_word}相关的文件夹:')
  34.         for f in result_folders:
  35.             print(f)
  36.     if len(result_files) != 0:
  37.         print(f'在【{folder}】下查找到的与关键词{search_word}相关的文件如下:')
  38.         for f in result_files:
  39.             print(f)
复制代码
效果:
234814byv66i6gycg6v74y.jpeg


3. 自动清理重复文件

自动清理文件实现步骤:
1.列出指定文件夹下的所有文件;
2.两两比较文件内容是否相同;
3.如果内容相同,则将其中一个文件移动到指定的文件夹中
  1. """
  2. 自动清理文件实现步骤:
  3. 1.列出指定文件夹下的所有文件;
  4. 2.两两比较文件内容是否相同;
  5. 3.如果内容相同,则将其中一个文件移动到指定的文件夹中
  6. """

  7. # 导入pathlib模块中的Path()函数
  8. from pathlib import Path
  9. # 导入filecmp模块中的cmp()函数,用于进行文件的比较
  10. from filecmp import cmp

  11. input_dir = '待处理文件'
  12. output_dir = '重复文件'
  13. # 创建Path对象
  14. src_folder = Path(input_dir)
  15. output_folder = Path(output_dir)
  16. # 判断输出目录是否存在
  17. if not output_folder.exists():
  18.     # 不存在则创建目录(多级创建)
  19.     output_folder.mkdir(parents=True)

  20. results = list(src_folder.glob('*'))  # 列出给定目录下的文件及子文件夹
  21. file_list = []
  22. for r in results:
  23.     # 判断路径是否指向一个文件
  24.     if r.is_file():
  25.         # 是则添加到文件列表
  26.         file_list.append(r)

  27. # 遍历文件列表,并进行比较
  28. for i in file_list:
  29.     for j in file_list:
  30.         if i != j and i.exists() and j.exists():
  31.             # 比较两个文件是否相同
  32.             if cmp(i, j):
  33.                 # 如果两个文件相同,则把其中一个文件移动到指定文件夹
  34.                 # 删除重复文件j.unlink()
  35.                 j.replace(output_folder / j.name)
复制代码
测试文件:
234814n8mz00m69c8ldx9v.jpeg

效果:
234814b2wsea22azwtjwzy.jpeg

234815q9q59oo7fdonegz6.jpeg


4. 批量转换图片格式
  1. from pathlib import Path
  2. from PIL import Image


  3. input_dir = 'input_images'
  4. output_dir = 'output_images'
  5. # 创建Path对象
  6. src_folder = Path(input_dir)
  7. output_folder = Path(output_dir)
  8. # 判断输出目录是否存在
  9. if not output_folder.exists():
  10.     # 不存在则创建目录(多级创建)
  11.     output_folder.mkdir(parents=True)

  12. file_list = list(src_folder.glob('*[.jpg|.jpeg]'))  # 查找后缀为jpg或jpeg的图片
  13. for f in file_list:
  14.     output_file = output_folder / f.name
  15.     # 将路径的扩展名进行替换
  16.     output_file = output_file.with_suffix('.png')
  17.     # 保存图片到指定路径
  18.     Image.open(f).save(output_file)
  19.     print(f'{f.name}-->格式转换完成!')
复制代码
测试文件:
234815dlvmxvvvr5u9v99l.jpeg

效果:
234815y1drpkwd0ppppp78.jpeg


5. 按拍摄日期自动分类图片

需安装exifread模块:
  1. pip install exifread
复制代码
234815zmfml340cj1rw03n.jpeg

步骤:
1.列出指定文件夹下的所有图片;
2.读取图片的EXIF(Exchangeable Image File Format)信息,并提取出拍摄日期;
3.将拍摄日期转换为所需格式,然后使用拍摄日期创建文件夹;
4.将图片移动到拍摄日期对应的文件夹中。
  1. """
  2. 步骤:
  3.     1.列出指定文件夹下的所有图片;
  4.     2.读取图片的EXIF(Exchangeable Image File Format)信息,并提取出拍摄日期;pip install exifread
  5.     3.将拍摄日期转换为所需格式,然后使用拍摄日期创建文件夹;
  6.     4.将图片移动到拍摄日期对应的文件夹中。
  7. """
  8. from pathlib import Path
  9. from datetime import datetime
  10. from exifread import process_file

  11. input_dir = 'input_images'
  12. output_dir = 'output_dir'
  13. # 创建Path对象
  14. src_folder = Path(input_dir)
  15. output_folder = Path(output_dir)
  16. # 判断输出目录是否存在
  17. if not output_folder.exists():
  18.     # 不存在则创建目录(多级创建)
  19.     output_folder.mkdir(parents=True)

  20. # 查找后缀为jpg或jpeg的图片
  21. file_list = list(src_folder.glob('*[.jpg|.jpeg]'))
  22. for f in file_list:
  23.     with open(f, 'rb') as fp:
  24.         # 读取图片的EXIF信息
  25.         # process_file函数会将读取的EXIF信息以字典格式返回
  26.         tags = process_file(fp, details=False)
  27.     # 判断字典中是否有拍摄日期
  28.     if 'EXIF DateTimeOriginal' in tags.keys():
  29.         dto = str(tags['EXIF DateTimeOriginal'])
  30.         # 将拍摄日期转换成所需格式,作为文件夹名称
  31.         folder_name = datetime.strptime(dto, '%Y:%m:%d %H:%M:%S').strftime('%Y-%m-%d')
  32.         # 设置输出目录的路径
  33.         output_path = output_folder / folder_name
  34.         if not output_path.exists():
  35.             output_path.mkdir(parents=True)
  36.         # 将图片移动到拍摄日期对应的文件夹中
  37.         f.replace(output_path / f.name)
复制代码
测试文件:
234815ljddu34srdd6fut2.jpeg

效果:
234816e8lll8zvsd8sy6a8.jpeg

以上就是Python实现自动化整理文件的示例代码的详细内容,更多关于Python整理文件的资料请关注晓枫资讯其它相关文章!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表