用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 相关文章推荐
9种python web 程序的部署方式小结
Jun 30 Python
Python如何判断数独是否合法
Sep 08 Python
Python实现采用进度条实时显示处理进度的方法
Dec 19 Python
python正则表达式及使用正则表达式的例子
Jan 22 Python
使用PyInstaller将python转成可执行文件exe笔记
May 26 Python
Pytorch实现基于CharRNN的文本分类与生成示例
Jan 08 Python
有关Tensorflow梯度下降常用的优化方法分享
Feb 04 Python
pandas apply多线程实现代码
Aug 17 Python
Python3+SQLAlchemy+Sqlite3实现ORM教程
Feb 16 Python
python小程序之飘落的银杏
Apr 17 Python
Python实现PIL图像处理库绘制国际象棋棋盘
Jul 16 Python
详解Python flask的前后端交互
Mar 31 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 HTML代码串 截取实现代码
2009/06/29 PHP
php中jQuery插件autocomplate的简单使用笔记
2012/06/14 PHP
获取PHP警告错误信息的解决方法
2013/06/03 PHP
8个PHP程序员常用的功能汇总
2014/12/18 PHP
php文件系统处理方法小结
2016/05/23 PHP
TP3.2框架分页相关实现方法分析
2020/06/03 PHP
Array.slice()与Array.splice()的返回值类型
2006/10/09 Javascript
JQuery UI皮肤定制
2009/07/27 Javascript
JS解析XML文件和XML字符串详解
2015/04/17 Javascript
简介JavaScript中valueOf()方法的使用
2015/06/05 Javascript
JavaScript中利用Array和Object实现Map的方法
2015/07/27 Javascript
基于jquery css3实现点击动画弹出表单源码特效
2015/08/31 Javascript
使用angularjs创建简单表格
2016/01/21 Javascript
微信小程序 location API实例详解
2016/10/02 Javascript
JS拉起或下载app的实现代码
2017/02/22 Javascript
js判断节假日实例代码
2017/12/27 Javascript
koa上传excel文件并解析的实现方法
2018/08/09 Javascript
Vue中el-form标签中的自定义el-select下拉框标签功能
2020/04/20 Javascript
vue动态加载SVG文件并修改节点数据的操作代码
2020/08/17 Javascript
[02:15]2014DOTA2国际邀请赛 赛后退役选手回顾
2014/08/01 DOTA
[31:47]夜魇凡尔赛茶话会 第三期01:选手知多少
2021/03/11 DOTA
python中的yield使用方法
2014/02/11 Python
python实现模拟按键,自动翻页看u17漫画
2015/03/17 Python
Python numpy 点数组去重的实例
2018/04/18 Python
python实现NB-IoT模块远程控制
2018/06/20 Python
浅谈利用numpy对矩阵进行归一化处理的方法
2018/07/11 Python
python 处理telnet返回的More,以及get想要的那个参数方法
2019/02/14 Python
Django Rest framework权限的详细用法
2019/07/25 Python
Python for i in range ()用法详解
2020/09/18 Python
SneakerStudio英国:最佳运动鞋商店
2019/05/22 全球购物
医学专业毕业生个人求职信
2013/12/25 职场文书
出纳员岗位职责风险
2014/03/06 职场文书
联片教研活动总结
2014/07/01 职场文书
五一劳动节活动总结
2015/02/09 职场文书
一次MySQL启动导致的事故实战记录
2021/09/15 MySQL
Vue ECharts实现机舱座位选择展示功能
2022/05/15 Vue.js