用Python自动清理电脑内重复文件,只要10行代码(自动脚本)


Posted in Python onJanuary 09, 2021

给定一个文件夹,使用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

由于遍历获取每一个文件或者文件夹后,需要判断是否是文件,如果是文件则可能将绝对路径存放到列表中,这里需要再完成两个事情:

  • 首先创建一个空列表,后面用list.append(i)添加文件路径
  • 接着利用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自动清理电脑内重复文件,只要10行代码的文章就介绍到这了,更多相关python 自动清理重复文件内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python THREADING模块中的JOIN()方法深入理解
Feb 18 Python
Python fileinput模块使用实例
May 28 Python
Python 实现文件的全备份和差异备份详解
Dec 27 Python
深入理解Python爬虫代理池服务
Feb 28 Python
python实现基于信息增益的决策树归纳
Dec 18 Python
Django模型修改及数据迁移实现解析
Aug 01 Python
Python DataFrame一列拆成多列以及一行拆成多行
Aug 06 Python
Python queue队列原理与应用案例分析
Sep 27 Python
使用python和pygame制作挡板弹球游戏
Dec 03 Python
Python类和实例的属性机制原理详解
Mar 21 Python
python 画条形图(柱状图)实例
Apr 24 Python
Python实现文本文件拆分写入到多个文本文件的方法
Apr 18 Python
selenium+headless chrome爬虫的实现示例
Jan 08 #Python
plt.figure()参数使用详解及运行演示
Jan 08 #Python
matplotlib绘制多子图共享鼠标光标的方法示例
Jan 08 #Python
利用python查看数组中的所有元素是否相同
Jan 08 #Python
Python爬虫自动化获取华图和粉笔网站的错题(推荐)
Jan 08 #Python
tensorflow与numpy的版本兼容性问题的解决
Jan 08 #Python
matplotlib自定义鼠标光标坐标格式的实现
Jan 08 #Python
You might like
php selectradio和checkbox默认选择的实现方法详解
2013/06/29 PHP
php生成QRcode实例
2014/09/22 PHP
php发送http请求的常用方法分析
2016/11/08 PHP
解决php扩展安装不生效问题
2019/10/25 PHP
清空上传控件input file的值
2010/07/03 Javascript
IE和Firefox的Javascript兼容性总结[推荐收藏]
2011/10/19 Javascript
javascript简易缓动插件(源码打包)
2012/02/16 Javascript
通过Javascript创建一个选择文件的对话框代码
2012/06/16 Javascript
巧用局部变量提升javascript性能
2014/02/24 Javascript
javascript 分号总结及详细介绍
2016/09/24 Javascript
nodejs实现发出蜂鸣声音(系统报警声)的方法
2017/01/18 NodeJs
使用原生的javascript来实现轮播图
2017/02/24 Javascript
详解vue2.0 transition 多个元素嵌套使用过渡
2017/06/19 Javascript
JavaScript反弹动画效果的实现代码
2017/07/13 Javascript
vue 使用ref 让父组件调用子组件的方法
2018/02/08 Javascript
解决vue 使用setTimeout,离开当前路由setTimeout未销毁的问题
2020/07/21 Javascript
Python随机函数random()使用方法小结
2018/04/29 Python
python高效过滤出文件夹下指定文件名结尾的文件实例
2018/10/21 Python
python针对不定分隔符切割提取字符串的方法
2018/10/26 Python
详解Python在使用JSON时需要注意的编码问题
2019/12/06 Python
为什么说python更适合树莓派编程
2020/07/20 Python
CSS3转换功能transform主要属性值分析及实现分享
2012/05/06 HTML / CSS
CSS3下的渐变文字效果实现示例
2018/03/02 HTML / CSS
阿根廷票务网站:StubHub阿根廷
2018/04/13 全球购物
《日月潭》教学反思
2014/02/28 职场文书
员工入职担保书范文
2014/04/01 职场文书
奥巴马英文演讲稿
2014/05/15 职场文书
体育口号大全
2014/06/18 职场文书
电子商务实训报告总结
2014/11/05 职场文书
优秀员工自荐书
2015/03/06 职场文书
超搞笑婚前保证书
2015/05/08 职场文书
幼儿教师三分钟演讲稿
2019/06/21 职场文书
读《方与圆》有感:交友方圆有度
2020/01/14 职场文书
PHP 对接美团大众点评团购券(门票)的开发步骤
2021/04/03 PHP
配置nginx 重定向到系统维护页面
2021/06/08 Servers
Python下opencv使用hough变换检测直线与圆
2021/06/18 Python