用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标准日志模块logging的使用方法
Nov 01 Python
python字符串连接方式汇总
Aug 21 Python
python实现简易版计算器
Jun 22 Python
python调用tcpdump抓包过滤的方法
Jul 18 Python
用Python实现最速下降法求极值的方法
Jul 10 Python
python通过链接抓取网站详解
Nov 20 Python
pygame库实现移动底座弹球小游戏
Apr 14 Python
python使用gdal对shp读取,新建和更新的实例
Mar 10 Python
Python猴子补丁Monkey Patch用法实例解析
Mar 23 Python
教你使用Python获取QQ音乐某个歌手的歌单
Apr 03 Python
Python按顺序遍历并读取文件夹中文件
Apr 29 Python
Python可视化神器pyecharts绘制水球图
Jul 07 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
dedecms 批量提取第一张图片最为缩略图的代码(文章+软件)
2009/10/29 PHP
php的chr和ord函数实现字符加减乘除运算实现代码
2011/12/05 PHP
ThinkPHP调用common/common.php函数提示错误function undefined的解决方法
2014/08/25 PHP
Joomla简单判断用户是否登录的方法
2016/05/04 PHP
PHP使用微信开发模式实现搜索已发送图文及匹配关键字回复的方法
2017/09/13 PHP
关于viewport,Ext.panel和Ext.form.panel的关系
2009/05/07 Javascript
动态样式类封装JS代码
2009/09/02 Javascript
jQuery遍历Form示例代码
2013/09/03 Javascript
js利用事件的阻止冒泡实现点击空白模态框的隐藏
2014/01/24 Javascript
js获取当前地址 JS获取当前URL的示例代码
2014/02/26 Javascript
jQuery中position()方法用法实例
2015/01/16 Javascript
使用jquery获取url以及jquery获取url参数的实现方法
2016/05/25 Javascript
JS实现的DIV块来回滚动效果示例
2017/02/07 Javascript
vue2.0 keep-alive最佳实践
2017/07/06 Javascript
浅谈手写node可读流之流动模式
2018/06/01 Javascript
Angular使用ControlValueAccessor创建自定义表单控件
2019/03/08 Javascript
如何在微信小程序里面退出小程序的方法
2019/04/28 Javascript
在vs code 中如何创建一个自己的 Vue 模板代码
2020/11/10 Javascript
three.js 实现露珠滴落动画效果的示例代码
2021/03/01 Javascript
[05:15]DOTA2英雄梦之声_第16期_灰烬之灵
2014/06/21 DOTA
django自定义Field实现一个字段存储以逗号分隔的字符串
2014/04/27 Python
深入浅析Python的类
2018/06/22 Python
python计算n的阶乘的方法代码
2019/10/25 Python
python中的yield from语法快速学习
2020/11/06 Python
TripAdvisor台湾:全球最大旅游网站
2018/08/26 全球购物
捷克家电和家具购物网站:OKAY.cz
2020/07/23 全球购物
丑小鸭教学反思
2014/02/03 职场文书
庆祝三八妇女节标语
2014/10/09 职场文书
2014年协会工作总结
2014/11/22 职场文书
大学生党员自我评价
2015/03/04 职场文书
因个人原因离职的辞职信范文
2015/05/12 职场文书
珍爱生命主题班会
2015/08/13 职场文书
队名及霸气口号大全
2015/12/25 职场文书
2016年中学法制宣传日活动总结
2016/04/01 职场文书
html5 录制mp3音频支持采样率和比特率设置
2021/07/15 Javascript
Oracle数据库中通用的函数实例详解
2022/03/25 Oracle