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 排列组合之itertools
Mar 20 Python
Python实现全角半角转换的方法
Aug 18 Python
利用Python实现Windows定时关机功能
Mar 21 Python
CentOS 7下Python 2.7升级至Python3.6.1的实战教程
Jul 06 Python
Python中函数eval和ast.literal_eval的区别详解
Aug 10 Python
TensorFlow实现Batch Normalization
Mar 08 Python
python实现石头剪刀布小游戏
Jan 20 Python
PyQt QListWidget修改列表项item的行高方法
Jun 20 Python
Python爬虫抓取技术的一些经验
Jul 12 Python
Python中BeautifuSoup库的用法使用详解
Nov 15 Python
Pycharm中如何关掉python console
Oct 27 Python
Python基础教程,Python入门教程(超详细)
Jun 24 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小技巧 把数组的键和值交换形成了新的数组,查找值取得键
2011/06/02 PHP
php中读写文件与读写数据库的效率比较分享
2013/10/19 PHP
php 购物车完整实现代码
2014/06/05 PHP
PHP获得数组交集与差集的方法
2015/06/10 PHP
简单了解将WordPress中的工具栏移到底部的小技巧
2015/12/31 PHP
php反射类ReflectionClass用法分析
2016/05/12 PHP
一个简单安全的PHP验证码类、PHP验证码
2016/09/24 PHP
使用EXT实现无刷新动态调用股票信息
2008/11/01 Javascript
为radio类型的INPUT添加客户端脚本(附加实现JS来禁用onClick事件思路代码)
2010/11/11 Javascript
JSON辅助格式化处理方法
2013/03/26 Javascript
Javascript限制网页只能在微信内置浏览器中访问
2014/11/09 Javascript
javascript实现unicode与ASCII相互转换的方法
2015/12/10 Javascript
JS及JQuery对Html内容编码,Html转义
2017/02/17 Javascript
最通俗易懂的javascript变量提升详解
2017/08/05 Javascript
js实现图片放大展示效果
2017/08/30 Javascript
javascript自定义事件功能与用法实例分析
2017/11/08 Javascript
Angular angular-file-upload文件上传的示例代码
2018/08/23 Javascript
Python装饰器decorator用法实例
2014/11/10 Python
Python3.4实现从HTTP代理网站批量获取代理并筛选的方法示例
2017/09/26 Python
Python安装图文教程 Pycharm安装教程
2018/03/27 Python
python计算两个地址之间的距离方法
2018/06/09 Python
使用python3构建文件传输的方法
2019/02/13 Python
用pandas划分数据集实现训练集和测试集
2020/07/20 Python
捷克厨房用品购物网站:Tescoma
2018/07/13 全球购物
Java语言程序设计测试题改错题部分
2014/07/22 面试题
信息管理员岗位职责
2013/12/01 职场文书
青年教师典范事迹材料
2014/01/31 职场文书
经济管理自荐书
2014/06/09 职场文书
暑假社会实践心得体会
2014/09/02 职场文书
房屋转让协议书
2014/10/18 职场文书
校本课程教学计划
2015/01/19 职场文书
焦点访谈观后感
2015/06/11 职场文书
成事在人观后感
2015/06/16 职场文书
《桂花雨》教学反思
2016/02/19 职场文书
靠谱的活动总结
2019/04/16 职场文书
MySQL查询学习之基础查询操作
2021/05/08 MySQL