脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Python - Python自动化办公之清理重复文件详解

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

2022-12-26 12:58渴望力量的哈士奇 Python

这篇文章主要为大家详细介绍了如何利用Python清理重复的文件,文中的示例代码讲解详细,对我们学习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的路径是根目录的话,会出现超级意外的结果,建议还是建立一个单独的文件夹路径来测试吧。(这个坑踩的我很心痛....)

运行结果如下:

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

 

清理重复文件的优化

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

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

这里我们先看一下实际情况的 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自动化办公之清理重复文件详解的文章就介绍到这了,更多相关Python清理重复文件内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/weixin_42250835/article/details/124678021

延伸 · 阅读

精彩推荐
  • Pythonpython实现红包裂变算法

    python实现红包裂变算法

    这篇文章主要介绍了python实现红包裂变算法的相关资料,需要的朋友可以参考下...

    Python教程网5312020-08-12
  • PythonPython cookbook(数据结构与算法)根据字段将记录分组操作示例

    Python cookbook(数据结构与算法)根据字段将记录分组操作示例

    这篇文章主要介绍了Python cookbook(数据结构与算法)根据字段将记录分组操作,结合实例形式分析了itertools.groupby()函数针对字典进行分组操作的相关实现技巧...

    垄上行11012021-01-22
  • Python浅谈PySpark SQL 相关知识介绍

    浅谈PySpark SQL 相关知识介绍

    这篇文章主要介绍了浅谈PySpark SQL 相关知识介绍,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面...

    foochane7462021-07-12
  • Python举例讲解Python的Tornado框架实现数据可视化的教程

    举例讲解Python的Tornado框架实现数据可视化的教程

    这篇文章主要介绍了举例讲解Python的Tornado框架实现数据可视化的教程,Tornado是一个异步的高人气开发框架,需要的朋友可以参考下...

    CHENGKANG3902020-06-19
  • Python详解Python中break语句的用法

    详解Python中break语句的用法

    这篇文章主要介绍了详解Python中break语句的用法,是Python入门的呼出知识,需要的朋友可以参考下...

    服务器之家13682020-06-28
  • Pythonpandas中NaN缺失值的处理方法

    pandas中NaN缺失值的处理方法

    当我们用python进行数据处理时会遇到很多缺失值,对缺失值我们需要进行删除或者填补,本文主要介绍了pandas中NaN缺失值的处理方法,感兴趣的可以了解一...

    蓝小白10244832021-10-31
  • Pythonpython处理multipart/form-data的请求方法

    python处理multipart/form-data的请求方法

    今天小编就为大家分享一篇python处理multipart/form-data的请求方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    hqzxsc20065652021-05-08
  • Pythonpython多维数组切片方法

    python多维数组切片方法

    下面小编就为大家分享一篇python多维数组切片方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 ...

    hutao110117578316642021-01-31