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中for循环和while循环的基本使用方法
Aug 21 Python
python机器学习实战之树回归详解
Dec 20 Python
python模块之paramiko实例代码
Jan 31 Python
python基础教程项目五之虚拟茶话会
Apr 02 Python
Python基于socket模块实现UDP通信功能示例
Apr 10 Python
在Python中居然可以定义两个同名通参数的函数
Jan 31 Python
Python把对应格式的csv文件转换成字典类型存储脚本的方法
Feb 12 Python
django 2.2和mysql使用的常见问题
Jul 18 Python
python openvc 裁剪、剪切图片 提取图片的行和列
Sep 19 Python
使用pyqt 实现重复打开多个相同界面
Dec 13 Python
opencv python如何实现图像二值化
Feb 03 Python
Pytorch中的数据集划分&正则化方法
May 27 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
世界上第一台立体声收音机
2021/03/01 无线电
php中的登陆login实例代码
2016/06/20 PHP
php获取文章内容第一张图片的方法示例
2017/07/03 PHP
PHP中单例模式的使用场景与使用方法讲解
2019/03/18 PHP
用js来解决ajax读取页面乱码
2010/11/28 Javascript
浅析js中取绝对值的2种方法
2013/07/09 Javascript
javascript中创建对象的几种方法总结
2013/11/01 Javascript
Javascript函数的参数
2015/07/16 Javascript
Bootstrap每天必学之导航组件
2016/04/25 Javascript
JS自定义函数对web前端上传的文件进行类型大小判断
2016/10/19 Javascript
Bootstrap Table使用心得总结
2016/11/29 Javascript
基于Bootstrap 3 JQuery及RegExp的表单验证功能
2017/02/16 Javascript
微信小程序倒计时功能实现代码
2017/11/09 Javascript
Vue.js+Layer表格数据绑定与实现更新的实例
2018/03/07 Javascript
vue组件实现弹出框点击显示隐藏效果
2020/10/26 Javascript
jQuery实现获取form表单内容及绑定数据到form表单操作分析
2018/07/03 jQuery
浅谈VueJS SSR 后端绘制内存泄漏的相关解决经验
2018/12/20 Javascript
vue导航栏部分的动态渲染实例
2019/11/01 Javascript
vue3+typescript实现图片懒加载插件
2020/10/26 Javascript
ES6的循环与可迭代对象示例详解
2021/01/31 Javascript
[46:12]完美世界DOTA2联赛循环赛 DM vs Matador BO2第一场 11.04
2020/11/04 DOTA
python中日期和时间格式化输出的方法小结
2015/03/19 Python
Python实现扣除个人税后的工资计算器示例
2018/03/26 Python
python程序变成软件的实操方法
2019/06/24 Python
Django 解决distinct无法去除重复数据的问题
2020/05/20 Python
ziaja齐叶雅官方海外旗舰店:来自波兰的天然护肤品牌
2017/01/02 全球购物
购买200个世界上最好的内衣品牌:Bare Necessities
2017/02/11 全球购物
大学生写自荐信的技巧
2014/01/08 职场文书
学习保证书范文
2014/04/30 职场文书
学校政风行风整改方案
2014/10/25 职场文书
2014年市场部工作总结
2014/11/25 职场文书
大学校园招聘会感想
2015/08/10 职场文书
就业指导讲座心得体会
2016/01/15 职场文书
《卧薪尝胆》读后感3篇
2019/12/26 职场文书
详解Python中的进程和线程
2021/06/23 Python
C3 线性化算法与 MRO之Python中的多继承
2021/10/05 Python