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中的两个内置模块介绍
Apr 05 Python
在Python上基于Markov链生成伪随机文本的教程
Apr 17 Python
详解Python中表达式i += x与i = i + x是否等价
Feb 08 Python
Python第三方库face_recognition在windows上的安装过程
May 03 Python
python对Excel按条件进行内容补充(推荐)
Nov 24 Python
将数据集制作成VOC数据集格式的实例
Feb 17 Python
keras 回调函数Callbacks 断点ModelCheckpoint教程
Jun 18 Python
10行Python代码实现Web自动化管控的示例代码
Aug 14 Python
给numpy.array增加维度的超简单方法
Jun 02 Python
Python还能这么玩之用Python修改了班花的开机密码
Jun 04 Python
OpenCV-Python实现轮廓的特征值
Jun 09 Python
Pandas数据结构之Series的使用
Mar 31 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
德劲1103的维修打理经验
2021/03/02 无线电
PHP 远程关机实现代码
2009/11/10 PHP
模板引擎正则表达式调试小技巧
2011/07/20 PHP
PHP写的获取各搜索蜘蛛爬行记录代码
2012/08/21 PHP
解析php中const与define的应用区别
2013/06/18 PHP
使用php实现快钱支付功能(涉及到接口)
2013/07/01 PHP
使用symfony命令创建项目的方法
2016/03/17 PHP
php使用parse_str实现查询字符串解析到变量中的方法
2017/02/17 PHP
Mootools 1.2教程 选项卡效果(Tabs)
2009/09/15 Javascript
给jqGrid数据行添加修改和删除操作链接(之一)
2011/11/04 Javascript
整理Javascript函数学习笔记
2015/12/01 Javascript
JavaScript仿支付宝6位数字密码输入框
2016/12/29 Javascript
详解vue-router基本使用
2017/04/18 Javascript
socket.io学习教程之深入学习篇(三)
2017/04/29 Javascript
NodeJS、NPM安装配置步骤(windows版本) 以及环境变量详解
2017/05/13 NodeJs
BootStrap数据表格实例代码
2017/09/13 Javascript
JS实现的文件拖拽上传功能示例
2018/05/21 Javascript
微信小程序实现发红包功能
2018/07/11 Javascript
解决bootstrap中下拉菜单点击后不关闭的问题
2018/08/10 Javascript
微信h5静默和非静默授权获取用户openId的方法和步骤
2020/06/08 Javascript
Window10+Python3.5安装opencv的教程推荐
2018/04/02 Python
python 重定向获取真实url的方法
2018/05/11 Python
python utc datetime转换为时间戳的方法
2019/01/15 Python
对python 中class与变量的使用方法详解
2019/06/26 Python
python经典趣味24点游戏程序设计
2019/07/26 Python
python中format函数如何使用
2020/06/22 Python
使用python把xmind转换成excel测试用例的实现代码
2020/10/12 Python
python绕过图片滑动验证码实现爬取PTA所有题目功能 附源码
2021/01/06 Python
vivo智能手机官方商城:vivo
2016/09/22 全球购物
C#面试常见问题
2013/02/25 面试题
大型车展策划方案
2014/02/01 职场文书
爱心倡议书范文
2014/05/12 职场文书
以权谋私检举信范文
2015/03/02 职场文书
2015年世界无烟日活动方案
2015/05/04 职场文书
2015年领导干部廉洁自律工作总结
2015/05/26 职场文书
Python识别花卉种类鉴定网络热门植物并自动整理分类
2022/04/08 Python