自学内容网 自学内容网

python调用dircmp进行文件夹比较

  不同电脑上的同一部署文件,由于更新频率不相同导致两边内容有差异,需要比较两边的文件夹及文件差异。之前写过批量修改文件名的Python代码,因此优先想用python处理。
  百度“python 文件夹对比”,不少文章都是自己实现的文件夹对比(参考文献2-3),也有介绍使用filecmp模块的dircmp类进行文件夹对比。本文学习调用dircmp进行文件夹比较的基本用法。
  dircmp类使用比较简单,创建dircmp类对象后,直接调用对应属性获取关心的数据即可,主要用到的属性或方法如下:

序号属性或方法说明
1common_dirs两个文件夹当前目录中的相同子目录集合,与subdirs属性类似,后者是将common_dirs中的名称映射到 dircmp 实例
2diff_files两个文件夹当前目录中文件名相同但文件内容有差异的文件集合
3left_only两个文件夹当前目录中仅存在于前者文件夹内的文件及子文件夹
4right_only两个文件夹当前目录中仅存在于后者文件夹内的文件及子文件夹

  基于参考文献1最下方的示例代码,调整显示函数输出内容,调整后的代码如下所示(复制本地电脑中的python代码文件夹,调整其中的文件内容,用于文件夹对比测试):

# coding=gbk

import os
import filecmp

def print_diff_files(dcmp):
    for name in dcmp.left_only:
        print("左侧 %s 单独存在的文件或文件夹: %s" % (dcmp.left,name))

    for name in dcmp.right_only:
        print("右侧 %s 单独存在的文件或文件夹: %s" % (dcmp.right,name))
    
    for name in dcmp.diff_files:
        print("存在差异的文件: %s 位于 %s and %s" % (name, dcmp.left,
              dcmp.right))
    for sub_dcmp in dcmp.subdirs.values():
        print_diff_files(sub_dcmp)

dcmp = filecmp.dircmp('E:\MyPrograms\Python', 'E:\MyPrograms\PythonTest')
print_diff_files(dcmp)

print("done")

  程序运行效果如下所示:
在这里插入图片描述
  文件夹内容较少时使用上述方式够用,如果文件夹内的文件及子文件夹数量成千上万个,使用上述方式就不是很好看,后续还会继续寻找更友好的显示方式。

参考文献:
[1]https://docs.python.org/zh-cn/3.13/library/filecmp.html#filecmp.cmp
[2]https://blog.csdn.net/qq_37021523/article/details/140109743
[3]https://blog.csdn.net/weixin_45726033/article/details/137751019


原文地址:https://blog.csdn.net/gc_2299/article/details/142994142

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!