用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实现一个简单的能够发送带附件的邮件程序的教程
Apr 08 Python
深入理解Python中的*重复运算符
Oct 28 Python
Python KMeans聚类问题分析
Feb 23 Python
pyqt5的QComboBox 使用模板的具体方法
Sep 06 Python
Python实现 PS 图像调整中的亮度调整
Jun 28 Python
python实现DEM数据的阴影生成的方法
Jul 23 Python
详解python中的模块及包导入
Aug 30 Python
pytorch制作自己的LMDB数据操作示例
Dec 18 Python
django 解决扩展自带User表遇到的问题
May 14 Python
python实现将中文日期转换为数字日期
Jul 14 Python
Selenium python时间控件输入问题解决方案
Jul 22 Python
Python request中文乱码问题解决方案
Sep 17 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 登录记住密码实现思路
2013/05/07 PHP
codeigniter集成ucenter1.6双向通信的解决办法
2014/06/12 PHP
在PHP站点的页面上添加Facebook评论插件的实例教程
2016/01/08 PHP
Zend Framework教程之Zend_Config_Ini用法分析
2016/03/23 PHP
php版微信公众平台回复中文出现乱码问题的解决方法
2016/09/22 PHP
PHP使用xpath解析XML的方法详解
2017/05/20 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
读jQuery之十三 添加事件和删除事件的核心方法
2011/08/23 Javascript
浅析jQuery中常用的元素查找方法总结
2013/07/04 Javascript
基于jquery插件制作左右按钮与标题文字图片切换效果
2013/11/07 Javascript
js或jquery实现页面打印可局部打印
2014/03/27 Javascript
基于Bootstrap实现tab标签切换效果
2020/04/15 Javascript
提高JavaScript执行效率的23个实用技巧
2017/03/01 Javascript
vue学习笔记之vue1.0和vue2.0的区别介绍
2017/05/17 Javascript
vue父组件触发事件改变子组件的值的方法实例详解
2019/05/07 Javascript
Vue中util的工具函数实例详解
2019/07/08 Javascript
vuex + keep-alive实现tab标签页面缓存功能
2019/10/17 Javascript
[06:38]DOTA2怒掀电竞风暴 2013Chinajoy
2013/07/27 DOTA
Python的内存泄漏及gc模块的使用分析
2014/07/16 Python
对python中执行DOS命令的3种方法总结
2018/05/12 Python
python高级特性和高阶函数及使用详解
2018/10/17 Python
Python 一键制作微信好友图片墙的方法
2019/05/16 Python
Python函数中参数是传递值还是引用详解
2019/07/02 Python
利用 Python ElementTree 生成 xml的实例
2020/03/06 Python
python中使用input()函数获取用户输入值方式
2020/05/03 Python
Python-jenkins 获取job构建信息方式
2020/05/12 Python
Python虚拟环境的创建和使用详解
2020/09/07 Python
Python 开发工具通过 agent 代理使用的方法
2020/09/27 Python
html5指南-1.html5全局属性(html5 global attributes)深入理解
2013/01/07 HTML / CSS
详解如何解决canvas图片getImageData,toDataURL跨域问题
2018/09/17 HTML / CSS
Raffaello Network德国:意大利拉斐尔时尚购物网
2019/05/01 全球购物
大班亲子运动会方案
2014/06/10 职场文书
违反交通法规检讨书
2014/09/10 职场文书
新闻通讯稿模板
2015/07/22 职场文书
《用字母表示数》教学反思
2016/02/17 职场文书
Python实现生活常识解答机器人
2021/06/28 Python