Python工具-文件夹对比
2013-03-14 21:04
211 查看
文件夹对比,意思是说对比两个文件夹,看他们里面哪些文件是共有的,哪些是单独所有的。
比如说这里对比d:/a文件夹和d:/b文件夹。最终输出共有的文件【对于共有的文件输出各自的最后修改时间】和单独拥有的文件。
代码如下:
运行结果如下:
其实实现起来还蛮简单的,因为python自身太强大。主要是用了python的set的功能。
a = t | s # t 和 s的并集
b = t & s # t 和 s的交集
c = t – s # 求差集(项在t中,但不在s中)
d = t ^ s # 对称差集(项在t或s中,但不会同时出现在二者中)
----------------------------
在python中实际上本来就有这样的工具。filecmp模块就是做这个工作的。
filecmp模块有cmp(file1,file2)、cmpfiles(dir1,dir2)、dircmp(dir1,dir2)等几个函数可以使用。
比如说这里对比d:/a文件夹和d:/b文件夹。最终输出共有的文件【对于共有的文件输出各自的最后修改时间】和单独拥有的文件。
代码如下:
#-*-coding:utf-8-*- #=============================================================================== # 目录对比工具,列出 # 1、A比B多了哪些文件 # 2、B比A多了哪些文件 # 3、二者相同的文件,如果最后修改日期不同,则要标注 # 4、包含子目录 #=============================================================================== import os, time AFILES = [] BFILES = [] COMMON = [] def getPrettyTime(state): return time.strftime('%y-%m-%d %H:%M:%S', time.localtime(state.st_mtime)) def dirCompare(apath, bpath): afiles = [] bfiles = [] for root, dirs , files in os.walk(apath): for f in files : afiles.append(root + "\\" + f) for root, dirs , files in os.walk(bpath): for f in files : bfiles.append(root + "\\" + f) #=========================================================================== # 去掉afiles中文件名的apath #=========================================================================== apathlen = len(apath) aafiles = [] for f in afiles: aafiles.append(f[apathlen:]) #=========================================================================== # 去掉afiles中文件名的apath #=========================================================================== bpathlen = len(bpath) bbfiles = [] for f in bfiles: bbfiles.append(f[bpathlen:]) afiles = aafiles bfiles = bbfiles setA = set(afiles) setB = set(bfiles) #=========================================================================== # 处理共有文件 #=========================================================================== commonfiles = setA & setB print "#=================================" print "common in '", apath, "' and '", bpath, "'" print "#=================================" print '\t\t\ta:\t\t\t\t\t\tb:' for f in sorted(commonfiles): print f + "\t\t" + getPrettyTime(os.stat(apath + "\\" + f)) + "\t\t" + getPrettyTime(os.stat(bpath + "\\" + f)) #=========================================================================== # 处理仅出现在一个目录中的文件 #=========================================================================== onlyFiles = setA ^ setB aonlyFiles = [] bonlyFiles = [] for of in onlyFiles: if of in afiles: aonlyFiles.append(of) elif of in bfiles: bonlyFiles.append(of) print "#=================================" print "#only in ", apath print "#=================================" for of in sorted(aonlyFiles): print of print "#=================================" print "#only in ", bpath print "#=================================" for of in sorted(bonlyFiles): print of if __name__ == '__main__': dirCompare('d:/a', 'd:/b')
运行结果如下:
其实实现起来还蛮简单的,因为python自身太强大。主要是用了python的set的功能。
a = t | s # t 和 s的并集
b = t & s # t 和 s的交集
c = t – s # 求差集(项在t中,但不在s中)
d = t ^ s # 对称差集(项在t或s中,但不会同时出现在二者中)
----------------------------
在python中实际上本来就有这样的工具。filecmp模块就是做这个工作的。
filecmp模块有cmp(file1,file2)、cmpfiles(dir1,dir2)、dircmp(dir1,dir2)等几个函数可以使用。
相关文章推荐
- 动感网页相册 python编写简单文件夹内图片浏览工具
- 对比文件或者文件夹不同的工具——Beyond Compare
- Python实现的文本对比报告生成工具示例
- python安装第三方的包 工具对比
- Python 入门学习(贰)文件/文件夹正则表达式批量重命名工具
- 【实用软件分享02】文本代码对比合并,文件夹对比合并工具:Beyond Compare
- 文件夹对比工具_JAVA实现
- 文件夹差异文件对比工具 meld
- python安装第三方的包 工具对比
- python笔记系列:文件内容、文件及文件夹的对比difflib、filecmp
- 使用python实现两个文件夹里文件的对比(包含内容的对比)
- 推荐一款好用的文件/文件夹对比工具 —— Beyond Compare
- JsonCompare Python环境下的json对比工具
- Python实现Json结构对比的小工具兼谈编程求解问题
- 使用Python实现一个文本对比报告生成工具
- Python 打包工具对比,Nuitka vs Pyinstaller
- Python小工具之文件夹下搜索包含关键字的文件
- Python 小工具--实现获取文件夹下面所有文件操作
- 小工具:得到目标文件夹中文件名 python
- [原创]Python小工具 —— 计算 文件 或 文件夹及其所有子文件夹中所有文件 的 代码行数