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编写批量卸载手机中安装的android应用脚本
Jul 21 Python
在Python中处理列表之reverse()方法的使用教程
May 21 Python
Python函数的周期性执行实现方法
Aug 13 Python
Python正则表达式教程之三:贪婪/非贪婪特性
Mar 02 Python
Python基于分水岭算法解决走迷宫游戏示例
Sep 26 Python
解决tensorflow测试模型时NotFoundError错误的问题
Jul 26 Python
python中的tcp示例详解
Dec 09 Python
利用python在大量数据文件下删除某一行的例子
Aug 21 Python
python实现超市管理系统(后台管理)
Oct 25 Python
Python3自动生成MySQL数据字典的markdown文本的实现
May 07 Python
使用python实现时间序列白噪声检验方式
Jun 03 Python
python 装饰器重要在哪
Feb 14 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
Linux下创建nginx脚本-start、stop、reload…
2014/08/03 PHP
Yii2中OAuth扩展及QQ互联登录实现方法
2016/05/16 PHP
php中strtotime函数性能分析
2016/11/20 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
PHP PDOStatement::fetchAll讲解
2019/01/31 PHP
jQuery Div中加载其他页面的实现代码
2009/02/27 Javascript
jquery的键盘事件修改代码
2011/02/24 Javascript
用js实现小球的自由移动代码
2013/04/22 Javascript
用jQuery与JSONP轻松解决跨域访问的问题
2014/02/04 Javascript
javascript不同类型数据之间的运算的转换方法
2014/02/13 Javascript
js监控IE火狐浏览器关闭、刷新、回退、前进事件
2014/07/23 Javascript
Nodejs初级阶段之express
2015/11/23 NodeJs
微信小程序 富文本转文本实例详解
2016/10/24 Javascript
Javascript中this关键字指向问题的测试与详解
2017/08/11 Javascript
在Js页面通过POST传递参数跳转到新页面详解
2017/08/25 Javascript
Node Puppeteer图像识别实现百度指数爬虫的示例
2018/02/22 Javascript
JS获取今天是本月第几周、本月共几周、本月有多少天、是今年的第几周、是今年的第几天的示例代码
2018/12/05 Javascript
python动态性强类型用法实例
2015/05/09 Python
Python中遍历字典过程中更改元素导致异常的解决方法
2016/05/12 Python
python中使用正则表达式的后向搜索肯定模式(推荐)
2017/11/11 Python
Flask框架URL管理操作示例【基于@app.route】
2018/07/23 Python
德国最大的网上鞋店之一:Schuhe24.de
2017/06/10 全球购物
UGG英国官方网站:UGG UK
2018/02/08 全球购物
英国和世界各地鲜花速递专家:Arena Flowers
2018/02/10 全球购物
巧克力蛋糕店创业计划书
2014/01/14 职场文书
大学考试作弊检讨书
2014/01/30 职场文书
意外伤害赔偿协议书
2014/09/16 职场文书
银行职员工作失误检讨书
2014/10/14 职场文书
护理医院见习报告
2014/11/03 职场文书
经验交流材料格式
2014/12/30 职场文书
销售会议开幕词
2015/01/28 职场文书
2015年语文教研组工作总结
2015/05/23 职场文书
react中props 的使用及进行限制的方法
2021/04/28 Javascript
tensorboard 可视化之localhost:6006不显示的解决方案
2021/05/22 Python
Java数据开发辅助工具Docker与普通程序使用方法
2021/09/15 Java/Android
利用JavaScript写一个简单计算器
2021/11/27 Javascript