用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的即时标记项目练习笔记
Sep 18 Python
Python中encode()方法的使用简介
May 18 Python
python比较两个列表大小的方法
Jul 11 Python
win10系统中安装scrapy-1.1
Jul 03 Python
django在接受post请求时显示403forbidden实例解析
Jan 25 Python
一份python入门应该看的学习资料
Apr 11 Python
Python for循环通过序列索引迭代过程解析
Feb 07 Python
Win10下安装并使用tensorflow-gpu1.8.0+python3.6全过程分析(显卡MX250+CUDA9.0+cudnn)
Feb 17 Python
Django全局启用登陆验证login_required的方法
Jun 02 Python
Python flask框架如何显示图像到web页面
Jun 03 Python
解析python 中/ 和 % 和 //(地板除)
Jun 28 Python
JupyterNotebook 输出窗口的显示效果调整实现
Sep 22 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中mysql与mysqli的区别分析
2013/06/10 PHP
phpQuery让php处理html代码像jQuery一样方便
2015/01/06 PHP
php中PDO方式实现数据库的增删改查
2015/05/17 PHP
php生成图片验证码
2015/06/09 PHP
Yii2基于Ajax自动获取表单数据的方法
2016/08/10 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
2017/11/17 PHP
从盛大通行证上摘下来的身份证验证js代码
2011/01/11 Javascript
jquery实现select选中行、列合计示例
2014/04/25 Javascript
浏览器复制插件zeroclipboard使用指南
2016/03/26 Javascript
bootstrap和jQuery.Gantt的css冲突 如何解决
2016/05/29 Javascript
微信小程序 免费SSL证书https、TLS版本问题的解决办法
2016/12/14 Javascript
JS实现淡入淡出图片效果的方法分析
2016/12/20 Javascript
基于vue的下拉刷新指令和滚动刷新指令
2016/12/23 Javascript
JS利用cookies设置每隔24小时弹出框
2017/04/20 Javascript
ReactJs设置css样式的方法
2017/06/08 Javascript
layui点击按钮添加可编辑的一行方法
2018/08/15 Javascript
[54:43]DOTA2-DPC中国联赛 正赛 CDEC vs Dynasty BO3 第一场 2月22日
2021/03/11 DOTA
python实现字典(dict)和字符串(string)的相互转换方法
2017/03/01 Python
python批量修改图片后缀的方法(png到jpg)
2018/10/25 Python
对Django项目中的ORM映射与模糊查询的使用详解
2019/07/18 Python
Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并
2019/08/28 Python
python机器学习实现决策树
2019/11/11 Python
CSS3新属性transition-property transform box-shadow实例学习
2013/06/06 HTML / CSS
分享CSS3制作卡片式图片的方法
2016/07/08 HTML / CSS
简约控的天堂:The Undone
2016/12/21 全球购物
医院总经理岗位职责
2014/02/04 职场文书
产品包装策划方案
2014/05/18 职场文书
行政工作试用期自我评价
2014/09/14 职场文书
先进党员事迹材料
2014/12/24 职场文书
试用期解除劳动合同通知书
2015/04/16 职场文书
小学教师见习总结
2015/06/23 职场文书
教导处教学工作总结
2015/08/12 职场文书
生日寿星公答谢词
2015/09/29 职场文书
员工工作心得体会
2019/05/07 职场文书
委托开发合同书(标准版)
2019/08/07 职场文书