用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读取Android permission文件
Nov 01 Python
python使用htmllib分析网页内容的方法
May 08 Python
Python中Django 后台自定义表单控件
Mar 28 Python
在django中使用自定义标签实现分页功能
Jul 04 Python
Pandas探索之高性能函数eval和query解析
Oct 28 Python
python 实现得到当前时间偏移day天后的日期方法
Dec 31 Python
python 矢量数据转栅格数据代码实例
Sep 30 Python
Python如何基于selenium实现自动登录博客园
Dec 16 Python
python GUI库图形界面开发之PyQt5滚动条控件QScrollBar详细使用方法与实例
Mar 06 Python
PyQt5+python3+pycharm开发环境配置教程
Mar 24 Python
Python如何将装饰器定义为类
Jul 30 Python
详解如何在PyCharm控制台中输出彩色文字和背景
Aug 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输入流php://input使用示例(php发送图片流到服务器)
2013/12/25 PHP
php基于Fleaphp框架实现cvs数据导入MySQL的方法
2016/02/23 PHP
Laravel 5.5官方推荐的Nginx配置学习教程
2017/10/06 PHP
Linux下 php7安装redis的方法
2018/11/01 PHP
Laravel5.1 框架Request请求操作常见用法实例分析
2020/01/04 PHP
键盘控制事件应用教程大全
2006/11/24 Javascript
js中符号转意问题示例探讨
2013/08/19 Javascript
jquery和ajax的关系详细介绍
2013/11/29 Javascript
jQuery的cookie插件实现保存用户登陆信息
2014/04/15 Javascript
javascript基本类型详解
2014/11/28 Javascript
javascript基于DOM实现省市级联下拉框的方法
2015/05/14 Javascript
微信小程序 监听手势滑动切换页面实例详解
2017/06/15 Javascript
angularjs2 ng2 密码隐藏显示的实例代码
2017/08/01 Javascript
关于axios如何全局注册浅析
2018/01/14 Javascript
微信小程序开发之改变data中数组或对象的某一属性值
2018/07/05 Javascript
解决Layui中templet中a的onclick参数传递的问题
2019/09/20 Javascript
Vue优化:常见会导致内存泄漏问题及优化详解
2020/08/04 Javascript
Vue中ref和$refs的介绍以及使用方法示例
2021/01/11 Vue.js
[10:28]2018DOTA2国际邀请赛寻真——VGJ.S寻梦之路
2018/08/15 DOTA
python通过定义一个类实例作为ftp回调方法
2015/05/04 Python
Python实现网络端口转发和重定向的方法
2016/09/19 Python
在Django同1个页面中的多表单处理详解
2017/01/25 Python
Python线性拟合实现函数与用法示例
2018/12/13 Python
python中的global关键字的使用方法
2019/08/20 Python
Python中的整除和取模实例
2020/06/03 Python
python 基于Apscheduler实现定时任务
2020/12/15 Python
python中使用asyncio实现异步IO实例分析
2021/02/26 Python
红色连衣裙精品店:Red Dress Boutique
2018/08/11 全球购物
Funko官方商店:源自美国,畅销全球搪胶收藏玩偶
2018/09/15 全球购物
美国购买肉、鸭、家禽、鹅肝和熟食网站:D’Artagnan
2018/11/13 全球购物
董事长秘书工作总结
2015/08/14 职场文书
2016秋季小学开学寄语
2015/12/03 职场文书
2016年优秀教师先进事迹材料
2016/02/26 职场文书
如何用PHP websocket实现网页实时聊天
2021/05/26 PHP
Python实现学生管理系统并生成exe可执行文件详解流程
2022/01/22 Python
使用Python解决图表与画布的间距问题
2022/04/11 Python