用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 Web开发模板引擎优缺点总结
May 06 Python
使用Python实现一个简单的项目监控
Mar 31 Python
python利用有道翻译实现"语言翻译器"的功能实例
Nov 14 Python
如何在python中使用selenium的示例
Dec 26 Python
python读取和保存视频文件
Apr 16 Python
python实现windows下文件备份脚本
May 27 Python
使用urllib库的urlretrieve()方法下载网络文件到本地的方法
Dec 19 Python
python 采用paramiko 远程执行命令及报错解决
Oct 21 Python
Linux下升级安装python3.8并配置pip及yum的教程
Jan 02 Python
常用python爬虫库介绍与简要说明
Jan 25 Python
Python3如何使用tabulate打印数据
Sep 25 Python
python引入其他文件夹下的py文件具体方法
May 23 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
当年上海收录机产品生产,进口和价格情况
2021/03/04 无线电
使用php+xslt在windows平台上
2006/10/09 PHP
Zend Framework实现将session存储在memcache中的方法
2016/03/22 PHP
PHP面向对象之工作单元(实例讲解)
2017/06/26 PHP
PHP获取链表中倒数第K个节点的方法
2018/01/18 PHP
XAMPP升级PHP版本实现步骤解析
2020/09/04 PHP
JavaScript Object的extend是一个常用的功能
2009/12/02 Javascript
用jquery实现点击栏目背景色改变
2012/12/10 Javascript
详细介绍8款超实用JavaScript框架
2013/10/25 Javascript
JQuery each()嵌套使用小结
2014/04/18 Javascript
JavaScript设计模式初探
2016/01/07 Javascript
Bootstrap弹出带合法性检查的登录框实例代码【推荐】
2016/06/23 Javascript
vue短信验证性能优化如何写入localstorage中
2018/04/25 Javascript
记一次vue去除#问题处理经过小结
2019/01/24 Javascript
vue以组件或者插件的形式实现throttle或者debounce
2019/05/22 Javascript
解决layer.msg 不居中 ifram中的问题
2019/09/05 Javascript
Linux系统上Nginx+Python的web.py与Django框架环境
2015/12/25 Python
浅谈python socket函数中,send与sendall的区别与使用方法
2017/05/09 Python
Python2和Python3中print的用法示例总结
2017/10/25 Python
django2 快速安装指南分享
2018/01/05 Python
mac下pycharm设置python版本的图文教程
2018/06/13 Python
python实现矩阵打印
2019/03/02 Python
Opencv实现抠图背景图替换功能
2019/05/21 Python
python实现局域网内实时通信代码
2019/12/22 Python
Python使用socketServer包搭建简易服务器过程详解
2020/06/12 Python
python 实现学生信息管理系统的示例
2020/11/28 Python
Lookfantastic挪威官网:英国知名美妆购物网站
2017/07/26 全球购物
英国天然宝石首饰购买网站:Gemondo Jewellery
2018/10/23 全球购物
儿子婚宴答谢词
2014/01/09 职场文书
办理生育手续介绍信
2014/01/14 职场文书
学习两会精神心得范文
2014/03/17 职场文书
刮痧观后感
2015/06/05 职场文书
python3读取文件指定行的三种方法
2021/05/24 Python
教你用Java在个人电脑上实现微信扫码支付
2021/06/13 Java/Android
golang中字符串MD5生成方式总结
2021/07/04 Golang
MySQL远程无法连接的一些常见原因总结
2022/09/23 MySQL