python实现自动清理重复文件


Posted in Python onAugust 24, 2020

前言

大家好,又到了Python办公自动化系列。

今天分享一个系统层面的自动化案例:

「给定一个文件夹,使用Python检查给定文件夹下有无文件重复,若存在重复则删除」

主要涉及的知识点有:

  • os模块综合应用
  • glob模块综合应用
  • 利用filecmp模块比较两个文件

步骤分析

该程序实现的逻辑可以具化为:

遍历获取给定文件夹下的所有文件,然后通过嵌套循环两两比较文件是否相同,如果相同则删除后者。

实现问题的关键就变成了?

如何判断两个文件是否相同?

在这里我们可以使用filecmp模块,来看看官方的介绍文档:

  • filecmp.cmp(f1, f2, shallow=True)
  • 比较名为f1和f2的文件,如果它们似乎相等则返回True,否则返回False
  • 如果shallow为真,那么具有相同os.stat()签名的文件将会被认为是相等的。否则,将比较文件的内容。

所以可以这样使用?

# 假设x和y两个文件是相同的
print(filecmp.cmp(x, y))
# True

解决了这个问题,我们就可以开始写代码了!

Python实现

导入需要的库并设置目标文件夹路径

import os
import glob
import filecmp

dir_path = r'C:\\xxxx'

接着遍历获取所有文件的绝对路径,我们可以利用glob模块的通配符结合recursive参数即可完成,框架如下:

for file in glob.glob(path + '/**/*', recursive=True):
  pass

由于遍历获取每一个文件或者文件夹后,需要判断是否是文件,如果是文件则可能将绝对路径存放到列表中,这里需要再完成两个事情:

  1. 首先创建一个空列表,后面用list.append(i)添加文件路径
  2. 接着利用os.path.isfile(i)判断是否是文件,返回True则执行添加元素的操作

具体代码如下

file_lst = []

for i in glob.glob(dir_path + '/**/*', recursive=True):
  if os.path.isfile(i):
    file_lst.append(i)

上一步我们获取了目标文件夹下的所有文件路径,接下来就可以嵌套遍历这个路径列表,其中filecmp.cmp进行文件判断,os.remove进行文件删除

for x in file_lst:
  for y in file_lst:
    if x != y:
      if filecmp.cmp(x, y):
        os.remove(y)

这里的代码已经实现了大致逻辑,但有一个细节需要考虑到:有可能循环到文件已经被前面的判断删除了,导致os.remove(file)由于文件不存在而报错

因此,可以用os.path.exists对文件存在进行判断,如下所示:

for x in file_lst:
  for y in file_lst:
    if x != y and os.path.exists(x) and os.path.exists(y):
      if filecmp.cmp(x, y):
        os.remove(y)

这样,一个简易的文件去重小程序就完成了,完整代码如下:

import os
import glob
import filecmp

dir_path = r'C:\xxxx'

file_lst = []

for i in glob.glob(dir_path + '/**/*', recursive=True):
  if os.path.isfile(i):
    file_lst.append(i)

for x in file_lst:
  for y in file_lst:
    if x != y and os.path.exists(x) and os.path.exists(y):
      if filecmp.cmp(x, y):
        os.remove(y)

写在最后

通过本文的Python自动化脚本制作过程,我们可以再次体会Python办公自动化的强大,同时本次实现的功能可以和之前自动整理文件的脚本结合使用!

以上就是python实现自动清理重复文件的详细内容,更多关于python清理重复文件的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python实用日期时间处理方法汇总
May 09 Python
Python中getattr函数和hasattr函数作用详解
Jun 14 Python
python 性能提升的几种方法
Jul 15 Python
python之文件的读写和文件目录以及文件夹的操作实现代码
Aug 28 Python
python递归查询菜单并转换成json实例
Mar 27 Python
Python实现利用163邮箱远程关电脑脚本
Feb 22 Python
Django使用模板后无法找到静态资源文件问题解决
Jul 19 Python
解决Python使用列表副本的问题
Dec 19 Python
快速查找Python安装路径方法
Feb 06 Python
python实现简单井字棋游戏
Mar 04 Python
使用python matploblib库绘制准确率,损失率折线图
Jun 16 Python
Python爬虫设置Cookie解决网站拦截并爬取蚂蚁短租的问题
Feb 22 Python
anaconda3安装及jupyter环境配置全教程
Aug 24 #Python
Python+pyftpdlib实现局域网文件互传
Aug 24 #Python
实例代码讲解Python 线程池
Aug 24 #Python
详解python UDP 编程
Aug 24 #Python
PyTorch如何搭建一个简单的网络
Aug 24 #Python
Python pysnmp使用方法及代码实例
Aug 24 #Python
详解python tcp编程
Aug 24 #Python
You might like
php 论坛采集程序 模拟登陆,抓取页面 实现代码
2009/07/09 PHP
php 需要掌握的东西 不做浮躁的人
2009/12/28 PHP
一个经典实用的PHP图像处理类分享
2014/11/18 PHP
PHP调用全国天气预报数据接口查询天气示例
2019/02/20 PHP
jquery插件制作 自增长输入框实现代码
2012/08/17 jQuery
JavaScript统计字符串中每个字符出现次数完整实例
2016/01/28 Javascript
jquery自定义右键菜单、全选、不连续选择
2016/03/01 Javascript
jQuery插件实现图片轮播特效
2016/06/16 Javascript
bootstrap 表单验证使用方法
2017/01/11 Javascript
JavaScript+Html5实现按钮复制文字到剪切板功能(手机网页兼容)
2017/03/30 Javascript
jQuery绑定事件方法及区别(bind,click,on,live,one)
2017/08/14 jQuery
微信小程序实现简单评论功能
2018/11/28 Javascript
在webstorm中配置less的方法详解
2020/09/25 Javascript
Python数据库的连接实现方法与注意事项
2016/02/27 Python
浅谈Python爬取网页的编码处理
2016/11/04 Python
Python爬取网易云音乐上评论火爆的歌曲
2017/01/19 Python
python实现多层感知器
2019/01/18 Python
PyQt5 在label显示的图片中绘制矩形的方法
2019/06/17 Python
如何使用Python 打印各种三角形
2019/06/28 Python
Python paramiko模块使用解析(实现ssh)
2019/08/30 Python
详解Python中@staticmethod和@classmethod区别及使用示例代码
2020/12/14 Python
HTML5中Localstorage的使用教程
2015/07/09 HTML / CSS
Html5大文件断点续传实现方法
2015/12/05 HTML / CSS
加拿大知名的国际儿童品牌:Hatley
2016/11/09 全球购物
以设计师精品品质提供快速时尚:PopJulia
2018/01/09 全球购物
英国最受欢迎的在线隐形眼镜商店:VisionDirect.co.uk
2018/12/06 全球购物
国庆宣传标语
2014/06/30 职场文书
教师党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
2014年乡镇工作总结
2014/11/21 职场文书
2015年主婚人婚礼致辞
2015/07/28 职场文书
2016年教师师德师风心得体会
2016/01/12 职场文书
2019个人年度目标制定攻略!
2019/07/12 职场文书
话题作文之学会尊重
2019/12/16 职场文书
JavaScript使用canvas绘制坐标和线
2021/04/28 Javascript
Django实现翻页的示例代码
2021/05/24 Python
Java 多线程协作作业之信号同步
2022/05/11 Java/Android