Python自动化办公之清理重复文件详解

目录
  • 清理重复的文件
  • 清理重复文件的优化

清理重复的文件

已知条件:

什么都不知道,只需要知道它是文件就可以了

实现方法:

可以从指定路径(或最上层路径)开始读取,利用 glob 读取每个文件夹,读到文件,记录名称和大小,每一次检测之前是否读取过相同名称的文件,如果存在,判断大小是否相同,如果相同,我们就认为这是重复文件,将其删除。

代码示例如下:

# coding:utf-8

import glob
import os.path

data = {}       # 定义一个空的字典,暂时将文件名存进来

def clear(path):
    result = glob.glob(path)    # 将 path 路径传入,赋值给 result

    for _data in result:    # for 循环判断是否是文件夹
        if glob.os.path.isdir(_data):   # 若是文件夹,继续将该文件夹的路径传给 clear() 函数继续递归查找
            _path = glob.os.path.join(_data, '*')
            clear(_path)
        else:                           # 若是文件,则将文件名提取出来
            name = glob.os.path.split(_data)[-1]

            if 'zip' in name:         # 因为目前我们测试的 path 下有 ".zip" 文件,所以这里跳过 '.zip' 压缩文件的读取否则会报错
                continue

            f = open(_data, 'r')      # 判断文件名之前先将内容读取出来,若是不可读模式
            content = f.read()        # 将读取内容赋值给 content

            if name in data:          # 判断文件名是否已存在 data 这个临时存储文件名的字典内,如果存在则进行执行删除动作
                _content_dict = data[name]

                if _content_dict == content:
                    print('文件 \"{}\" 被删除...'.format(_data))     # 调试
                    os.remove(_data)
            else:
                data[name] = content

if __name__ == '__main__':
    path = glob.os.path.join(glob.os.getcwd(), 'test_file')
    clear(path)

PS:这里需要注意一下,如果path的路径是根目录的话,会出现超级意外的结果,建议还是建立一个单独的文件夹路径来测试吧。(这个坑踩的我很心痛....)

运行结果如下:

清理重复文件的优化

其实在这里大家能够想到一个问题,可能会存在这样一种情况,在不同的文件夹下存在着相同文件名,但是文件的内容却是不相同的。如果利用上面的脚本执行针对文件夹下相同文件名的文件进行删除的话,其实是一种不严谨的操作。

由此也就引出了我们接下来针对上文脚本优化的需求。

这里我们先看一下实际情况的 data 的值应该是怎样的:data = {'name': {'path/name': 'content', 'path2/name': 'content'}}

  • 上行内容的 name 为我们传入路径的根路径
  • 上行内容的 path/name 实际上为二级路径
  • 上行内容的 content 为文件内容

通过这种二级路径与内容删除的重复文件才是一种比较合理的方式。

示例代码如下:

# coding:utf-8

import glob
import os.path

data = {}       # 定义一个空的字典,暂时将文件名存进来

def clear(path):
    result = glob.glob(path)    # 将 path 路径传入,赋值给 result

    for _data in result:    # for 循环判断是否是文件夹
        if glob.os.path.isdir(_data):   # 若是文件夹,继续将该文件夹的路径传给 clear() 函数继续递归查找
            _path = glob.os.path.join(_data, '*')
            clear(_path)
        else:                           # 若是文件,则将文件名提取出来
            name = glob.os.path.split(_data)[-1]

            if 'zip' in name:         # 因为目前我们测试的 path 下有 ".zip" 文件,所以这里跳过 '.zip' 压缩文件的读取否则会报错
                continue

            f = open(_data, 'r')      # 判断文件名之前先将内容读取出来,若是不可读模式
            content = f.read()        # 将读取内容赋值给 content

            if name in data:        # 判断文件名是否已存在 data 这个临时存储文件名的字典内,如果存在则进行执行删除动作
                                    # 如果不存在,则将读取到的二级路径与内容存储至 data 这个空字典内
                sub_name = data[name]       # 定义 sub_name 用以获取二级路径

                is_delete = False   # is_delete 用以记录删除状态;如果没有删除,还需要将二级路径添加至 data

                for k, v in sub_name.items():    # 再次循环判断二级路径下的文件;k 为路径,v 为文件内容
                    print('二级路径为 \"{}\" ,'.format(k), name, '内容为 \'{}\' '.format(v))   # 调试打印输出二级路径下文件的循环
                    if v == content:             # 如果文件名与内容相同,则执行删除动作
                        print('文件 \"{}\" 被删除...'.format(_data))     # 调试被删除的文件
                        os.remove(_data)      # 删除重复文件后,变更 is_delete 状态为True
                        is_delete = True

                if not is_delete:       # 如果没有删除则将 content 读取到的内容赋值给 data[name][_data]
                    data[name][_data] = content
            else:
                data[name] = {
                    _data: content
                }

if __name__ == '__main__':
    path = glob.os.path.join(glob.os.getcwd(), 'test_file')
    clear(path)
    print(data)

运行结果如下:

到此这篇关于Python自动化办公之清理重复文件详解的文章就介绍到这了,更多相关Python清理重复文件内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python删除本地夹里重复文件的方法

    上次的博文主要说了从网上下载图片,于是我把整个笑话网站的图片都拔下来了,但是在拔取的图片中有很多重复的,比如说页面的其他图片.重复发布的图片等等.所以我又找了python的一些方法,写了一个脚本可以删除指定文件夹里重复的图片. 一.方法和思路 1.比对文件是否相同的方法:hashlib库里提供了获取文件md5值的方法,所以我们可以通过md5值来判定是否图片相同 2.对文件的操作:os库里有对文件的操作方法,比如:os.remove()可以删除指定的文件, os.listdir()可以通过指定文件

  • 用python删除文件夹中的重复图片(图片去重)

    第一部分:判断两张图片是否相同 要查找重复的图片,必然绕不开判断两张图片是否相同.判断两张图片简单呀!图片可以看成数组,比较两个数组是否相等不就行了.但是这样做太过简单粗暴,因为两个数组的每个元素都要一一比较,效率很低.为了尽量避免两个庞大的数组比较: 先进行两张图片的大小(byte)比较,若大小不相同,则两张图片不相同: 在两张图片的大小相同的前提下,进行两张图片的尺寸(长和宽)比较,若尺寸不相同,则两张不相同: 在两张图片的尺寸相同的前提下,进行两张图片的内容(即数组元素)比较,若内容不相同

  • python实现自动清理重复文件

    前言 大家好,又到了Python办公自动化系列. 今天分享一个系统层面的自动化案例: 「给定一个文件夹,使用Python检查给定文件夹下有无文件重复,若存在重复则删除」 主要涉及的知识点有: os模块综合应用 glob模块综合应用 利用filecmp模块比较两个文件 步骤分析 该程序实现的逻辑可以具化为: 遍历获取给定文件夹下的所有文件,然后通过嵌套循环两两比较文件是否相同,如果相同则删除后者. 实现问题的关键就变成了? 如何判断两个文件是否相同? 在这里我们可以使用filecmp模块,来看看官

  • Python实现的删除重复文件或图片功能示例【去重】

    本文实例讲述了Python实现的删除重复文件或图片功能.分享给大家供大家参考,具体如下: 通过python爬虫或其他方式保存的图片文件通常包含一些重复的图片或文件, 通过下面的python代码可以将重复的文件删除以达到去重的目的.其中,文件目录结构如下图: # /usr/bin/env python # -*- coding:utf-8 -*- # 运行的代码文件要放到删除重复的文件或图片所包含的目录中 import os import hashlib def filecount(): file

  • 利用Python删除电脑中重复文件的方法

    目录 前言 练习 代码演示 总结 前言 在生活中,我们经常会遇到电脑中文件重复的情况.在文件较少的情况下,这类情况还比较容易处理,最不济就是一个个手动对比删除:而在重复文件很多的时候,我们很难保证把重复文件全部删完.下面文章就来简单介绍便捷一个小方法,用Python来删除重复文件 练习 Python提供一个内置电脑文件管理库os模块,我们可以利用它来删除多余文件. 当一个文档里存在重复文件名,我们的系统会自动给我们重复的文件名更名, 比如下图的文件“1”重复了3次:  那我们该怎么删除文件“1”

  • 教你用Python寻找重复文件并删除的脚本写法

    在实际生活中,经常会有文件重复的困扰,即同一个文件可能既在A目录中,又在B目录中,更可恶的是,即便是同一个文件,文件名可能还不一样.在文件较少的情况下,该类情况还比较容易处理,最不济就是one by one的人工比较——即便如此,也很难保证你的眼神足够犀利.倘若文件很多,这岂不是个impossible mission?最近在看<Python UNIX和Linux系统管理指南>,里面就有有关“数据比较”的内容,在其基础上,结合实际整理如下. 该脚本主要包括以下模块:diskwalk,chechs

  • python编程实现清理微信重复缓存文件

    目录 glob 模块 glob方法 zlib.crc32 去重复 总结 文 | 某某白米饭 来源:Python 技术「ID: pythonall」 微信和 QQ 都有一个存放缓存文件的文件夹,微信在设置 --> 文件管理,QQ 在系统设置 --> 基本设置 --> 文件管理 --> 打卡个人文件中找到它,平时大家对这个文件夹关注度不高,这个文件夹慢慢的,偷偷的就占用了好几十个 G 的磁盘空间.下面就用 Python 写个删除重复文件的脚本清理这些空间. glob 模块 glob 模

  • Python自动化办公之清理重复文件详解

    目录 清理重复的文件 清理重复文件的优化 清理重复的文件 已知条件: 什么都不知道,只需要知道它是文件就可以了 实现方法: 可以从指定路径(或最上层路径)开始读取,利用 glob 读取每个文件夹,读到文件,记录名称和大小,每一次检测之前是否读取过相同名称的文件,如果存在,判断大小是否相同,如果相同,我们就认为这是重复文件,将其删除. 代码示例如下: # coding:utf-8 import glob import os.path data = {} # 定义一个空的字典,暂时将文件名存进来 d

  • Python自动化办公之邮件发送全过程详解

    使用Python实现自动化邮件发送,可以让你摆脱繁琐的重复性业务,可以节省非常多的时间.操作前配置(以较为复杂的QQ邮箱举例,其他邮箱操作类似) 单击设置-账号,滑倒下方协议处,开启IMAP/SMTP协议(IMAP,即Internet Message Access Protocol(互联网邮件访问协议),可以通过这种协议从邮件服务器上获取邮件的信息.下载邮件等.IMAP与POP类似,都是一种邮件获取协议.) (ps.开启需要验证) 记住端口号,后续写代码发送邮件时候需要: 生成授权码,前期配置完

  • Python自动化办公之创建PPT文件

    目录 PPT 的创建 python-pptx 的安装 生成一个空的 PPT python-pptx 的9种布局 从这一章开始,将进入 PPT 文件的自动化操作.关于 PPT 自动化操作所要实现的目的依然很简单.包括 “PPT的创建”.“读取PPT(不包含图片,图片是非可读对象)” 以及 “PPT” 的基本操作. 而使用到的操作 PPT 的模块就是 python-pptx 模块,我们全程就通过该模块来实现以上的内容. PPT 的创建 接下来我们就学习一下,如何利用 python-pptx 模块如何

  • python 自动化办公之批量修改文件名实操

    目录 1. 程序背景 2. 程序要求 3. 解决思路 4. 完整代码 5. 运行结果 6. 总结 1. 程序背景 之前做文件批量移动的时候不小心多加了一个pdf后缀,但问题不大,几行代码就可以搞定~ 2. 程序要求 将以下目录中文件夹中的有问题的文件全部重命名为单个.pdf结尾的文件 3. 解决思路 需要用到 os.re 和 shutil 三个库,均为系统自带,无需安装 使用 os 库得到年份的文件夹名,以及年份文件夹中的文件名 使用正则表达式 re 将“.pdf.pdf”全部替换为“.pdf”

  • python自动化报告的输出用例详解

    1.设计简单的用例 2.设计用例 以TestBaiduLinks.py命名 # coding:utf-8 from selenium import webdriver import unittest class BaiduLinks(unittest.TestCase): def setUp(self): base_url = 'https://www.baidu.com' self.driver = webdriver.Chrome() self.driver.implicitly_wait(

  • Python自动化办公实战案例详解(Word、Excel、Pdf、Email邮件)

    目录 背景 实现过程 1)替换Word模板生成对应邀请函 2)将Word邀请函转化为Pdf格式 4)自动发送邮件 5)完整代码 总结 背景 想象一下,现在你有一份Word邀请函模板,然后你有一份客户列表,上面有客户的姓名.联系方式.邮箱等基本信息,然后你的老板现在需要替换邀请函模板中的姓名,然后将Word邀请函模板生成Pdf格式,之后编辑统一的邀请话术(邮件正文),再依次发送邀请函附件到客户邮箱,你会怎么做? 正常情况下,我们肯定是复制粘贴Excel表格中的客户姓名,之后挨个Word文档进行替换

  • Python自动化办公之群发邮件案例详解

    目录 背景 实现过程 总结 背景 想象一下,现在你有一份Word邀请函模板,然后你有一份客户列表,上面有客户的姓名.联系方式.邮箱等基本信息,然后你的老板现在需要替换邀请函模板中的姓名,然后将Word邀请函模板生成Pdf格式,之后编辑统一的邀请话术(邮件正文),再依次发送邀请函附件到客户邮箱,你会怎么做? 正常情况下,我们肯定是复制粘贴Excel表格中的客户姓名,之后挨个Word文档进行替换,之后将Word转Pdf格式,然后复制Excel表格中的邮箱进行发送编辑好的邮件正常,之后附上邀请函附件,

  • Python实现自动清理电脑垃圾文件详解

    经常存在在我们的电脑中的垃圾文件主要是指系统在运行过程中产生的tmp临时文件.日志文件.临时备份文件等.垃圾清理器的作用其实也是对这些文件进行清理,不会影响到我们使用产生的数据文件.如果是手动删除的话要一个一个的找出来去删除就比较麻烦了,用python写一个脚本直接启动就大功告成了. 在这个脚本的实现过程中使用到的内置库就是os库,没有通过其他的三方插件进行实现.所以也不用下载其他的python模块,直接调用内置库就OK了. import os 因为我们使用界面化的处理,这里导入一下pyqt5的

  • Python自动化办公之Word文件内容的读取

    目录 前言 利用 python 批量读取文件 word利器之python-docx python-docx 安装 python-docx 之 Document python-docx 之段落内容读取 python-docx 之表格内容读取 前言 前面几个章节我们学习了对于普通文件的操作,比如说文件的创建.复制粘贴.裁剪粘贴.文件名的重命名.删除等等.另外还学习了一些基本练习,如何查找文件.如何按照内容查找文件等等. 在本章节及后续,将开始学习一些特殊文件的自动化相关操作.如 word.excel

随机推荐