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中的变量的数据类型
May 13 Python
Python获取SQLite查询结果表列名的方法
Jun 21 Python
Python使用OpenCV进行标定
May 08 Python
通过Pandas读取大文件的实例
Jun 07 Python
Python实现将字符串的首字母变为大写,其余都变为小写的方法
Jun 11 Python
python使用flask与js进行前后台交互的例子
Jul 19 Python
python Tcp协议发送和接收信息的例子
Jul 22 Python
python3.6+django2.0+mysql搭建网站过程详解
Jul 24 Python
使用python实现数组、链表、队列、栈的方法
Dec 20 Python
Python读取分割压缩TXT文本文件实例
Feb 14 Python
Python @property及getter setter原理详解
Mar 31 Python
Python requests用法和django后台处理详解
Mar 19 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函数
2006/10/09 PHP
dede3.1分页文字采集过滤规则详说(图文教程)续四
2007/04/03 PHP
Linux下安装PHP MSSQL扩展教程
2014/10/24 PHP
php将access数据库转换到mysql数据库的方法
2014/12/24 PHP
PHP文件缓存smarty模板应用实例分析
2016/02/26 PHP
php实现映射操作实例详解
2019/10/02 PHP
laravel-admin 后台表格筛选设置默认的查询日期方法
2019/10/03 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
提高 DHTML 页面性能
2006/12/25 Javascript
javascript禁制后退键(Backspace)实例代码
2013/11/15 Javascript
js如何判断用户是否是用微信浏览器
2014/06/05 Javascript
jQuery简单获取键盘事件的方法
2016/01/22 Javascript
js传值后台中文出现乱码的解决方法
2016/06/30 Javascript
JavaScript基于Dom操作实现查找、修改HTML元素的内容及属性的方法
2017/01/20 Javascript
JavaScript实现获取远程的html到当前页面中
2017/03/26 Javascript
angularjs中ng-bind-html的用法总结
2017/05/23 Javascript
js提取中文拼音首字母的封装工具类
2018/03/12 Javascript
解决vue中使用Axios调用接口时出现的ie数据处理问题
2018/08/13 Javascript
JS实现的简单分页功能示例
2018/08/23 Javascript
python生成密码字典的方法
2018/07/06 Python
python的常用模块之collections模块详解
2018/12/06 Python
python 统计文件中的字符串数目示例
2019/12/24 Python
pytorch实现CNN卷积神经网络
2020/02/19 Python
pycharm实现在子类中添加一个父类没有的属性
2020/03/12 Python
python numpy库np.percentile用法说明
2020/06/08 Python
sklearn的predict_proba使用说明
2020/06/28 Python
美体小铺法国官方网站:The Body Shop法国
2020/06/04 全球购物
室内设计专业个人的自我评价
2013/12/18 职场文书
数学系毕业生的自我评价
2014/01/10 职场文书
八一慰问活动方案
2014/02/07 职场文书
个人授权委托书范文
2014/09/21 职场文书
党员评议表自我评价范文
2014/10/20 职场文书
干部理论学习心得体会
2016/01/21 职场文书
Python自动化爬取天眼查数据的实现
2021/06/15 Python
ElementUI实现el-form表单重置功能按钮
2021/07/21 Javascript
MySQL8.0的WITH查询详情
2021/08/30 MySQL