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 12 Python
python实现批量下载新浪博客的方法
Jun 15 Python
Python的多态性实例分析
Jul 07 Python
Python调用C# Com dll组件实战教程
Oct 12 Python
python实现对指定字符串补足固定长度倍数截断输出的方法
Nov 15 Python
浅谈python多进程共享变量Value的使用tips
Jul 16 Python
Python解析json时提示“string indices must be integers”问题解决方法
Jul 31 Python
详解使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件
Aug 23 Python
TensorFlow 输出checkpoint 中的变量名与变量值方式
Feb 11 Python
python通过函数名调用函数的几种场景
Sep 23 Python
python获取命令行参数实例方法讲解
Nov 02 Python
一篇文章带你搞懂Python类的相关知识
May 20 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/08/25 PHP
php根据日期判断星座的函数分享
2014/02/13 PHP
PHP程序员必须清楚的问题汇总
2014/12/18 PHP
PHP使用递归方式列出当前目录下所有文件的方法
2015/06/02 PHP
Yii CFileCache 获取不到值的原因分析
2017/02/08 PHP
javascript删除字符串最后一个字符
2014/01/14 Javascript
jQuery的animate函数实现图文切换动画效果
2015/05/03 Javascript
jquery实现的Accordion折叠面板效果代码
2015/09/02 Javascript
JS Ajax请求如何防止重复提交
2016/06/13 Javascript
深入理解js generator数据类型
2016/08/16 Javascript
Bootstrap基本样式学习笔记之表单(3)
2016/12/07 Javascript
Bootstrap标签页(Tab)插件使用方法
2017/03/21 Javascript
详解Angular路由 ng-route和ui-router的区别
2017/05/22 Javascript
关于页面刷新vuex数据消失问题解决方案
2017/07/03 Javascript
JavaScript数据类型的存储方法详解
2017/08/25 Javascript
js注册时输入合法性验证方法
2017/10/21 Javascript
JavaScript实现获取select下拉框中第一个值的方法
2018/02/06 Javascript
Vue使用lodop实现打印小结
2019/07/06 Javascript
Vue 中可以定义组件模版的几种方式
2019/08/06 Javascript
js实现旋转的星空效果
2019/11/01 Javascript
python中类的一些方法分析
2014/09/25 Python
python计算牛顿迭代多项式实例分析
2015/05/07 Python
简单谈谈Python流程控制语句
2016/12/04 Python
python中装饰器级连的使用方法示例
2017/09/29 Python
使用NumPy和pandas对CSV文件进行写操作的实例
2018/06/14 Python
python+pyqt5实现图片批量缩放工具
2019/03/18 Python
Django实现将一个字典传到前端显示出来
2020/04/03 Python
Python urllib3软件包的使用说明
2020/11/18 Python
HTML5应用之文件上传
2016/12/30 HTML / CSS
Html5 实现微信分享及自定义内容的流程
2019/08/20 HTML / CSS
什么是Web Service?
2012/07/25 面试题
电大学习个人自我评价范文
2013/10/04 职场文书
家长建议怎么写
2014/05/15 职场文书
县级文明单位申报材料
2014/05/23 职场文书
大学生学年个人总结
2015/02/15 职场文书
关于感恩的素材句子(38句)
2019/11/11 职场文书