用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程序设计入门(3)数组的使用
Jun 16 Python
使用Python编写简单网络爬虫抓取视频下载资源
Nov 04 Python
Python sqlite3事务处理方法实例分析
Jun 19 Python
Python实现PS滤镜Fish lens图像扭曲效果示例
Jan 29 Python
python3.6.3转化为win-exe文件发布的方法
Oct 31 Python
python+opencv实现阈值分割
Dec 26 Python
Python创建或生成列表的操作方法
Jun 19 Python
Windows10下 python3.7 安装 facenet的教程
Sep 10 Python
Python figure参数及subplot子图绘制代码
Apr 18 Python
python安装读取grib库总结(推荐)
Jun 24 Python
python urllib库的使用详解
Apr 13 Python
Github 使用python对copilot做些简单使用测试
Apr 14 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载入页面时编码的方法
2014/07/29 PHP
UTF-8正则表达式如何匹配汉字
2015/08/03 PHP
PHP实现的支付宝支付功能示例
2019/03/26 PHP
JQuery扩展插件Validate—4设置错误提示的样式
2011/09/05 Javascript
jquery插件珍藏(图片局部放大/信息提示框)
2013/01/08 Javascript
图片动画横条广告带上下滚动的JS代码
2013/10/25 Javascript
JQuery中操作Css样式的方法
2014/02/12 Javascript
js实现从数组里随机获取元素
2015/01/12 Javascript
12306验证码破解思路分享
2015/03/25 Javascript
js实现点击按钮后给Div图层设置随机背景颜色的方法
2015/05/06 Javascript
Bootstrap标签页(Tab)插件使用方法
2017/03/21 Javascript
在Vue中使用echarts的实例代码(3种图)
2017/07/10 Javascript
记一次用ts+vuecli4重构项目的实现
2020/05/21 Javascript
JS中的变量作用域(console版)
2020/07/18 Javascript
python dict.get()和dict['key']的区别详解
2016/06/30 Python
Python语言描述随机梯度下降法
2018/01/04 Python
Python爬虫基础之XPath语法与lxml库的用法详解
2018/09/13 Python
使用Python和Prometheus跟踪天气的使用方法
2019/05/06 Python
Python图像阈值化处理及算法比对实例解析
2020/06/19 Python
使用html2canvas实现浏览器截图的示例代码
2018/01/26 HTML / CSS
使用css3 属性如何丰富图片样式(圆角 阴影 渐变)
2012/11/22 HTML / CSS
UGG澳洲官网:UGG Australia
2018/04/26 全球购物
台湾7-ELEVEN线上购物中心:7-11
2021/01/21 全球购物
网络工程师的自我评价
2013/10/02 职场文书
《晚上的太阳》教学反思
2014/04/23 职场文书
小学生个人先进事迹材料
2014/05/08 职场文书
中考标语大全
2014/06/05 职场文书
讲文明懂礼貌演讲稿
2014/09/11 职场文书
医生见习报告范文
2014/11/03 职场文书
三方协议书
2015/01/27 职场文书
大班上学期个人总结
2015/02/13 职场文书
停水通知
2015/04/16 职场文书
写给纪委的违纪检讨书
2015/05/05 职场文书
2016公司新年问候语
2015/11/11 职场文书
职场新人知识:如何制定一份合理的工作计划?
2019/09/11 职场文书
导游词之金鞭溪风景区
2019/09/12 职场文书