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设置tmpfs来加速项目的教程
Apr 17 Python
学习python之编写简单简单连接数据库并执行查询操作
Feb 27 Python
Python使用wxPython实现计算器
Jan 30 Python
Flask之flask-script模块使用
Jul 26 Python
Flask实现跨域请求的处理方法
Sep 27 Python
python中metaclass原理与用法详解
Jun 25 Python
python爬取代理IP并进行有效的IP测试实现
Oct 09 Python
Python request post上传文件常见要点
Nov 20 Python
python 图像增强算法实现详解
Jan 24 Python
matplotlib之属性组合包(cycler)的使用
Feb 24 Python
pytorch通过训练结果的复现设置随机种子
Jun 01 Python
Python中的 Set 与 dict
Mar 13 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
MYSQL 小技巧 -- LAST_INSERT_ID
2009/11/24 PHP
PHP下常用正则表达式整理
2010/10/26 PHP
如何使用FireFox插件FirePHP调试PHP
2013/07/23 PHP
php程序内部post数据的方法
2015/03/31 PHP
php 微信公众平台开发模式实现多客服的实例代码
2016/11/07 PHP
PHP静态成员变量
2017/02/14 PHP
拖动布局之保存布局页面cookies篇
2010/10/29 Javascript
JavaScript编程的10个实用小技巧
2014/04/18 Javascript
jquery的总体架构分析及实现示例详解
2014/11/08 Javascript
js 基础篇必看(点击事件轮播图的简单实现)
2016/08/20 Javascript
解决webpack -p压缩打包react报语法错误的方法
2017/07/03 Javascript
Angular服务Request异步请求的实例讲解
2018/08/13 Javascript
通过layer实现可输入的模态框的例子
2019/09/27 Javascript
javascript实现简单打字游戏
2019/10/29 Javascript
vue组件传值的实现方式小结【三种方式】
2020/02/05 Javascript
Vue的Options用法说明
2020/08/14 Javascript
python文件读写并使用mysql批量插入示例分享(python操作mysql)
2014/02/17 Python
Python中列表、字典、元组数据结构的简单学习笔记
2016/03/20 Python
浅谈pandas中DataFrame关于显示值省略的解决方法
2018/04/08 Python
使用python实现语音文件的特征提取方法
2019/01/09 Python
Python3安装Pillow与PIL的方法
2019/04/03 Python
解决python明明pip安装成功却找不到包的问题
2019/08/28 Python
Django 简单实现分页与搜索功能的示例代码
2019/11/07 Python
Python Django2.0集成Celery4.1教程
2019/11/19 Python
Python生成器常见问题及解决方案
2020/03/21 Python
CSS3 透明色 RGBA使用介绍
2013/08/06 HTML / CSS
HTML5 body设置自适应全屏
2020/05/07 HTML / CSS
美国最流行的男士时尚网站:Touch of Modern
2018/02/05 全球购物
世界顶级俱乐部的官方球衣和套装:Subside Sports
2018/04/22 全球购物
新闻系毕业生推荐信
2013/11/16 职场文书
《乌鸦和狐狸》教学反思
2014/02/08 职场文书
社会实践活动总结范文
2014/07/03 职场文书
学校2014重阳节活动策划方案
2014/09/16 职场文书
2015年车间主任工作总结
2015/05/21 职场文书
2016年4月份红领巾广播稿
2015/12/21 职场文书
2016年师德师风学习心得体会
2016/01/12 职场文书