给定一个文件夹,使用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自动清理电脑内重复文件,只要10行代码(自动脚本)的更多相关文章

  1. Python学习(4)( If 判断语句 、逻辑运算、elif、if嵌套、随机数、石头剪刀布程序)

    Python学习(4)一、python的 if 判断语句二、python的逻辑运算1. and2. or3. not三、python的 elif 判断语句四、python的if 嵌套五、随机数的处理六、石头剪刀布 ---演练一、python的 if 判断语句在python 中,if 语句 就是用来进......

  2. python 基于UDP协议套接字通信的实现

    一、UPD实现单用户通信服务端:'''from socket import *server=socket(AF_INET,SOCK_DGRAM)- 这里代指的是一种数据报协议,数据报协议指的就是udp协议(补充: 数据报就是自己utp协议中有自己的头,有自己的数据部分)server.bind('IP......

  3. Python学习(8)(列表的定义、常用操作、关键字函数方法的区别、列表的循环遍历、应用场景)

    Python学习(8)一、python的列表 定义二、python的列表 常用操作三、python的关键字、函数和方法的特点和区别四、python 列表的循环遍历五、python 列表的应用场景高级变量类型列表元组字典字符串python中数据类型可以分为 数字型和非数字型数字型:整型(int)、浮点......

  4. python 执行函数的九种方法

    方法一:直接调用函数运行这种是最简单且直观的方法def task(): print("running task")task()如果是在类中,也是如此class Task: def task(self): ......

  5. 10步写了个Django网站

    Django做网站只要10步,真的只有10步,不信?咱们来数数……今天主要讲解用Pycharm编辑器搭建网站,网站功能是 实现在局域网中快速传递大文件! 比如:同事要给你个1G的文件,你丢一个网站链接给他。他上传后,文件就在你电脑啦!演示效果如下动图:从电脑F磁盘通过浏览器上传,在D盘出现文件,这里......

  6. Python读取pdf表格写入excel的方法

    背景今天突然想到之前被要求做同性质银行的数据分析。妈耶!十几个银行,每个银行近5年的财务数据,而且财务报表一般都是 pdf 的,我们将 pdf 中表的数据一个个的拷贝到 excel 中,再借助 excel 去进行求和求平均等聚合函数操作,完事了还得把求出来的结果再统一 CV 到另一张表中,进行可视化......

  7. 删除pandas中产生Unnamed:0列的操作

    我们在数据处理,往往不小心,pandas会“主动”加上行和列的名称,我现在就遇到了这个问题。这个是pandas中to_csv生成的数据各种拼接之后的最终数据(默认参数,index=True,column=True)Unnamed: 0 ip Unnamed: 0.1 ... 766 767 ......

  8. python jinja2模板的使用

    模板的用处jinja2 可以用来修改配置文件,把配置文件的关键地方可以用变量来进行替换模板语法模板语法和django的模板语法差不多 在jinja2中,存在三种语法:控制结构{% %}变量取值{{ }}注释{# #}for 循环{% for user in users %}{{user.userna......

  9. python asyncio 协程库的使用

    asyncio 是 python 力推多年的携程库,与其 线程库 相得益彰,更轻量,并且协程可以访问同一进程中的变量,不需要进程间通信来传递数据,所以使用起来非常顺手。asyncio 官方文档写的非常简练和有效,半小时内可以学习和测试完,下面为我的一段 HelloWrold,感觉可以更快速的帮你认识......

  10. 【Python爬虫】:使用高性能异步多进程爬虫获取豆瓣电影Top250

    在本篇博文当中,将会教会大家如何使用高性能爬虫,快速爬取并解析页面当中的信息。一般情况下,如果我们请求网页的次数太多,每次都要发出一次请求,进行串行执行的话,那么请求将会占用我们大量的时间,这样得不偿失。因此我们可以i使用高性能爬虫,也就是采用多进程,异步的方式对数据进行爬取和解析,这样就可以在更快......

随机推荐

  1. R语言 实现将数据框中的字符类型数字转换为数值

    场景1我现在有一个数据框datexpr,里面的数字都是以字符型表示的,像这样> datexpr[1,1][1] " 1.143773961"现在我想把这个数据框中的字符型数字全部转为数值型数字使用下面语句即可datexpr2=as.data.frame(lapply(dat......

  2. android上实现0.5px线条的原理分析

    由于安卓手机无法识别border: 0.5px,因此我们要用0.5px的话必须要借助css3中的-webkit-transform:scale缩放来实现。原理:将伪元素的宽设为200%,height设为1px通过-webkit-transform:scale(.5)来进行缩小一倍,这样就得到bord......

  3. js中this指向的问题与联系深入探究

    前言JavaScript 中最大的一个安全问题,也是最令人困惑的一个问题,就是在某些情况下this的值是如何确定的。有js基础的同学面对这个问题基本可以想到:this的指向和函数调用的方式相关。这当然是正确的,然而,这几种方式有什么联系吗?这是我接下来要说明的问题。this从哪里来this 是js的......

  4. java构造函数的三种类型总结

    我们说构造函数能处理参数的问题,但其实也要分三种情况进行讨论。目前有三种类型:无参、有参和默认。根据不同的参数情况,需要我们分别进行构造函数的讨论。这里重点是无参构造函数的初始化也要分两种方法进行分析。下面我们就这三种不同的构造函数类型分别为大家进行展示。1.无参构造函数不带入参的构造函数叫无参构造......

  5. linux显示行数命令

    linux 如何显示一个文件的某几行(中间几行)【一】从第3000行开始,显示1000行。即显示3000~3999行cat filename | tail -n +3000 | head -n 1000【二】显示1000行到3000行cat filename| head -n 3000 | tail......

  6. 如何通过SQL注入盗取数据库信息

    目录数据库结构注入示例判断共有多少字段判断字段的显示位置显示登录用户和数据库名查看所有数据库名查看数据库的所有表名查看表的所有字段查看所有的用户密码我们都是善良的银!一生戎码只为行侠仗义,知道这个不是为了做啥非法的事,只是知道小偷怎么偷东西才能更好地防范。SQL注入(SQL Injection),S......

  7. 解读Python的文件读写

    前言本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。PS:如有需要Python学习资料的小伙伴可以加下Python快乐交流群:11362015451.概述Python中内置了文件读写的功能核心:读写文件其实请求操作系统打开一个文件对象【文件描述符】......

  8. Android事件分发机制全面解析

    事件分发机制事件分发机制的两个阶段:分发:事件从父视图往子视图分发,被拦截后不再传递,进入回溯阶段回溯:事件从子视图往父视图回溯,被消费后不再回溯关键方法:ViewGroup.dispatchTouchEvent 往子视图分发事件ViewGroup.onInterceptTouchEvent 返回 ......

  9. Java 概述

    1. 什么是Java什么是 JavaJava是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的......

  10. python中编写函数并调用的知识点总结

    能够调用自己编写的函数,这在很多开发语言中,都会用到一个叫做mian的主函数,这个函数一般都是程序的入口,当程序启动时,首先执行这个函数。在Python中,main函数的主要作用就是你写的模块既可以导入到别的模块中用,也可以在模块本身执行使用。下面就来了解具体使用操作吧。编写简单的函数并调用:def......