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实现QQ游戏大家来找茬辅助工具
Sep 14 Python
python字符串中的单双引
Feb 16 Python
python实现二叉树的遍历
Dec 11 Python
python利用socketserver实现并发套接字功能
Jan 26 Python
Python使用matplotlib绘制多个图形单独显示的方法示例
Mar 14 Python
Python封装原理与实现方法详解
Aug 28 Python
python 返回列表中某个值的索引方法
Nov 07 Python
对python中不同模块(函数、类、变量)的调用详解
Jul 16 Python
python输入错误后删除的方法
Oct 12 Python
python函数中将变量名转换成字符串实例
May 11 Python
Python调用百度OCR实现图片文字识别的示例代码
Jul 17 Python
python如何利用traceback获取详细的异常信息
Jun 05 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连接mssql数据库的几种方法
2013/02/21 PHP
php实现上传图片生成缩略图示例
2014/04/13 PHP
php中return的用法实例分析
2015/02/28 PHP
thinkPHP3.x常量整理(预定义常量/路径常量/系统常量)
2016/05/20 PHP
Thinkphp实现站点静态化的方法详解
2017/03/21 PHP
Mac系统下安装PHP Xdebug
2018/03/30 PHP
javascript 写类方式之二
2009/07/05 Javascript
html中的input标签的checked属性jquery判断代码
2012/09/19 Javascript
基于jQuery.Validate验证库知识点的详解
2013/04/26 Javascript
jQuery多媒体插件jQuery Media Plugin使用详解
2014/12/19 Javascript
javascript三元运算符用法实例
2015/04/16 Javascript
打造自己的jQuery插件入门教程
2016/09/23 Javascript
不间断循环滚动效果的实例代码(必看篇)
2016/10/08 Javascript
详解nodejs 文本操作模块-fs模块(五)
2016/12/23 NodeJs
原生js实现电商侧边导航效果
2017/01/19 Javascript
jQuery插件HighCharts绘制简单2D折线图效果示例【附demo源码】
2017/03/21 jQuery
vue.js框架实现表单排序和分页效果
2017/08/09 Javascript
小程序异步问题之多个网络请求依次执行并依次收集请求结果
2019/05/05 Javascript
浅谈Node 异步IO和事件循环
2019/05/05 Javascript
mock.js模拟前后台交互
2019/07/25 Javascript
浅谈bootstrap layer.open中end的使用方法
2019/09/12 Javascript
Vue项目打包部署到iis服务器的配置方法
2019/10/14 Javascript
[01:08:17]2018DOTA2亚洲邀请赛3月29日 小组赛B组 EG VS VGJ.T
2018/03/30 DOTA
Python比较两个图片相似度的方法
2015/03/13 Python
玩转python爬虫之正则表达式
2016/02/17 Python
python 对给定可迭代集合统计出现频率,并排序的方法
2018/10/18 Python
PyCharm 配置远程python解释器和在本地修改服务器代码
2019/07/23 Python
python实现名片管理器的示例代码
2019/12/17 Python
小女主人连衣裙:Little Mistress
2017/07/10 全球购物
adidas爱尔兰官方网站:阿迪达斯运动鞋和运动服
2019/11/01 全球购物
电脑销售顾问自荐信
2014/01/29 职场文书
天鹅的故事教学反思
2014/02/04 职场文书
竞争性谈判邀请书
2014/02/06 职场文书
文明寄语大全
2014/04/11 职场文书
四风批评与自我批评范文
2014/10/14 职场文书
Django实现聊天机器人
2021/05/31 Python