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将人民币转换大写的脚本代码
Feb 10 Python
Python实现全排列的打印
Aug 18 Python
Python数据预处理之数据规范化(归一化)示例
Jan 08 Python
Python Pandas 如何shuffle(打乱)数据
Jul 30 Python
使用python将excel数据导入数据库过程详解
Aug 27 Python
python实现加密的方式总结
Jan 19 Python
Python统计学一数据的概括性度量详解
Mar 03 Python
学习Python列表的基础知识汇总
Mar 10 Python
Python直接赋值及深浅拷贝原理详解
Sep 05 Python
python操作redis数据库的三种方法
Sep 10 Python
教你用Python爬取英雄联盟皮肤原画
Jun 13 Python
python实现剪贴板的操作
Jul 01 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/02/26 PHP
PHP命名空间和自动加载类
2016/04/03 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
PHP+Ajax实现上传文件进度条动态显示进度功能
2018/06/04 PHP
php生成二维码不保存服务器还有下载功能的实现代码
2018/08/09 PHP
tp5.1 框架数据库高级查询技巧实例总结
2020/05/25 PHP
基于jQuery试卷自动排版系统
2010/07/18 Javascript
JavaScript 处理Iframe自适应高度(同或不同域名下)
2013/03/29 Javascript
js 数值转换为3位逗号分隔的示例代码
2014/02/19 Javascript
jquery加载图片时以淡入方式显示的方法
2015/01/14 Javascript
JavaScript中Textarea滚动条不能拖动的解决方法
2015/12/15 Javascript
JS组件中bootstrap multiselect两大组件较量
2016/01/26 Javascript
获取JS中网页各种高宽与位置的方法总结
2016/07/27 Javascript
js 中获取制定的cook信息实现方法
2016/11/19 Javascript
浅谈Nodejs中的作用域问题
2016/12/26 NodeJs
JQuery validate 验证一个单独的表单元素实例
2017/02/17 Javascript
js实现产品缩略图效果
2017/03/10 Javascript
AngularJS中下拉框的基本用法示例
2017/10/11 Javascript
最后说说Vue2 SSR 的 Cookies 问题
2018/05/25 Javascript
vue2.0 + ele的循环表单及验证字段方法
2018/09/18 Javascript
详解基于electron制作一个node压缩图片的桌面应用
2019/01/29 Javascript
详解关于表格合并span-method方法的补充(表格数据由后台动态返回)
2019/05/21 Javascript
JSX在render函数中的应用详解
2019/09/04 Javascript
Element Popover 弹出框的使用示例
2020/07/26 Javascript
Vue利用localStorage本地缓存使页面刷新验证码不清零功能的实现
2020/09/04 Javascript
[12:29]《一刀刀一天》之DOTA全时刻19:蝙蝠骑士田伯光再度不举
2014/06/10 DOTA
numpy.linalg.eig() 计算矩阵特征向量方式
2019/11/29 Python
Python如何向SQLServer存储二进制图片
2020/06/08 Python
CSS 3.0 结合video视频实现的创意开幕效果
2020/06/01 HTML / CSS
勤俭节约倡议书
2014/04/14 职场文书
万能检讨书2000字
2014/10/17 职场文书
团队合作精神学习心得体会
2016/01/19 职场文书
redis连接被拒绝的解决方案
2021/04/12 Redis
python爬虫之利用selenium模块自动登录CSDN
2021/04/22 Python
php png失真的原因及解决办法
2021/10/24 PHP
OpenStack虚拟机快照和增量备份实现方法
2022/04/04 Servers