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遍历指定城市的一周气温
Mar 31 Python
Python实现程序判断季节的代码示例
Jan 28 Python
Python3中exp()函数用法分析
Feb 19 Python
python assert的用处示例详解
Apr 01 Python
Python pip替换为阿里源的方法步骤
Jul 02 Python
python threading和multiprocessing模块基本用法实例分析
Jul 25 Python
Django中间件拦截未登录url实例详解
Sep 03 Python
python中seaborn包常用图形使用详解
Nov 25 Python
python操作gitlab API过程解析
Dec 27 Python
Python imutils 填充图片周边为黑色的实现
Jan 19 Python
如何基于线程池提升request模块效率
Apr 18 Python
关于keras.layers.Conv1D的kernel_size参数使用介绍
May 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版
2016/07/21 PHP
php自定义函数实现二维数组按指定key排序的方法
2016/09/29 PHP
php使用pecl方式安装扩展操作示例
2019/08/12 PHP
JavaScript 实现模态对话框 源代码大全
2009/05/02 Javascript
基于jQuery实现的Ajax 验证用户名是否存在的实现代码
2011/04/06 Javascript
Jquery 在页面加载后执行的几种方式
2014/03/14 Javascript
JS获取iframe中marginHeight和marginWidth属性的方法
2015/04/01 Javascript
jQuery实现不断闪烁文字的方法
2015/05/15 Javascript
详解JavaScript的策略模式编程
2015/06/24 Javascript
超链接怎么正确调用javascript函数
2016/05/23 Javascript
jQuery验证插件validate使用方法详解
2020/09/13 Javascript
AngularJS中的API(接口)简单实现
2016/07/28 Javascript
jQuery EasyUI Tab 选项卡问题小结
2016/08/16 Javascript
JS对象序列化成json数据和json数据转化为JS对象的代码
2017/08/23 Javascript
JQuery实现table中tr上移下移的示例(超简单)
2018/01/08 jQuery
完美解决axios在ie下的兼容性问题
2018/03/05 Javascript
基于webpack.config.js 参数详解
2018/03/20 Javascript
Bootstrap table表格初始化表格数据的方法
2018/07/25 Javascript
前端axios下载excel文件(二进制)的处理方法
2018/07/31 Javascript
js拖动滑块和点击水波纹效果实例代码
2018/10/16 Javascript
vue单页面实现当前页面刷新或跳转时提示保存
2018/11/02 Javascript
微信打开网址添加在浏览器中打开提示的办法
2019/05/20 Javascript
python删除文件示例分享
2014/01/28 Python
在python中安装basemap的教程
2018/09/20 Python
详解用Python练习画个美队盾牌
2019/03/23 Python
django 多对多表的创建和插入代码实现
2019/09/09 Python
softmax及python实现过程解析
2019/09/30 Python
flask框架url与重定向操作实例详解
2020/01/25 Python
PyQt5+Pycharm安装和配置图文教程详解
2020/03/24 Python
html5指南-7.geolocation结合google maps开发一个小的应用
2013/01/07 HTML / CSS
Vita Fede官网:在意大利手工制作,在纽约市设计
2019/10/25 全球购物
自我鉴定写作要点
2014/01/17 职场文书
岗位工作说明书
2014/07/29 职场文书
护理专业自我评价
2015/03/11 职场文书
九年级历史教学反思
2016/02/19 职场文书
2019秋季运动会口号
2019/06/25 职场文书