不同电脑上的同一部署文件,由于更新频率不相同导致两边内容有差异,需要比较两边的文件夹及文件差异。之前写过批量修改文件名的Python代码,因此优先想用python处理。
百度“python 文件夹对比”,不少文章都是自己实现的文件夹对比(参考文献2-3),也有介绍使用filecmp模块的dircmp类进行文件夹对比。本文学习调用dircmp进行文件夹比较的基本用法。
dircmp类使用比较简单,创建dircmp类对象后,直接调用对应属性获取关心的数据即可,主要用到的属性或方法如下:
序号 | 属性或方法 | 说明 |
---|---|---|
1 | common_dirs | 两个文件夹当前目录中的相同子目录集合,与subdirs属性类似,后者是将common_dirs中的名称映射到 dircmp 实例 |
2 | diff_files | 两个文件夹当前目录中文件名相同但文件内容有差异的文件集合 |
3 | left_only | 两个文件夹当前目录中仅存在于前者文件夹内的文件及子文件夹 |
4 | right_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.youkuaiyun.com/qq_37021523/article/details/140109743
[3]https://blog.youkuaiyun.com/weixin_45726033/article/details/137751019