使用python实现两个文件夹里文件的对比(包含内容的对比)
#-*-coding:utf-8-*- #===============================================================================
# 目录对比工具(包含子目录 ),并列出
# 1、A比B多了哪些文件
# 2、B比A多了哪些文件
# 3、二者相同的文件:文件大小相同 VS 文件大小不同 (Size相同文件不打印:与Size不同文件显示未排序)
#=============================================================================== import os, time,difflib AFILES = [] #EE
BFILES = [] #SVN
COMMON = [] #EE & SVN
def getPrettyTime(state):
return time.strftime('%y-%m-%d %H:%M:%S', time.localtime(state.st_mtime)) # def getpathsize(dir): #获取文件大小的函数,未用上,仅供学习.故注释掉
# size=0
# for root, dirs, files in os.walk(dir):
# #root:目录:str 如: C:\CopySVN\SystemObject\TopoProcedure\Built-in\
# #dirs:目录名称:列表: 如 ['Parsers']
# #files:名称:列表: 如 ['011D0961FB42416AA49D5E82945DE7E9.og',...]
# #file:目录:str, 如 011D0961FB42416AA49D5E82945DE7E9.og
# for file in files:
# path = os.path.join(root,file)
# size = os.path.getsize(path)
# return size 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)
#sizeB = os.path.getsize(root + "\\" + f) 此处定义的size无法在commonfiles进行比较. (A,B在各自的循环里面) # 去掉afiles中文件名的apath (拿A,B相同的路径\文件名,做成集合,去找交集)
apathlen = len(apath)
aafiles = []
for f in afiles:
aafiles.append(f[apathlen:]) # 去掉bfiles中文件名的bpath
bpathlen = len(bpath)
bbfiles = []
for f in bfiles:
bbfiles.append(f[bpathlen:])
afiles = aafiles
bfiles = bbfiles
setA = set(afiles)
setB = set(bfiles)
#print('%$%'+str(len(setA)))
#print('%%'+str(len(setB)))
commonfiles = setA & setB # 处理共有文件
#print ("===============File with different size in '", apath, "' and '", bpath, "'===============")
#将结果输出到本地
#with open(os.getcwd()+'diff.txt','w') as di:
#di.write("===============File with different size in '", apath, "' and '", bpath, "'===============")
for f in sorted(commonfiles):
sA=os.path.getsize(apath + "\\" + f)
sB=os.path.getsize(bpath + "\\" + f)
if sA==sB: #共有文件的大小比较
#pass #print (f + "\t\t" + getPrettyTime(os.stat(apath + "\\" + f)) + "\t\t" + getPrettyTime(os.stat(bpath + "\\" + f)))
#以下代码是处理大小一致,但是内容可能不一致的情况
#print("in sa=sb")
#print(os.getcwd())
saf=[]
sbf=[]
sAfile=open(apath + "\\" + f)
iter_f=iter(sAfile)
for line in iter_f:
saf.append(line)
sAfile.close()
sBfile=open(bpath + "\\" + f)
iter_fb=iter(sBfile)
for line in iter_fb:
sbf.append(line)
sBfile.close()
saf1=sorted(saf)
sbf1=sorted(sbf)
if(len(saf1)!=len(sbf1)):
with open(os.getcwd()+'\\comment_diff.txt','a') as fp:
print(os.getcwd())
fp.write(apath + "\\" + f+" lines size not equal "+bpath + "\\" + f+'\n')
else:
for i in range(len(saf1)):
#print("into pre")
if(saf1[i]!=sbf1[i]):
print('into commont')
with open(os.getcwd()+'\\comment_diff.txt','a') as fp1:
fp1.write(apath + "\\" + f+" content not equal "+bpath + "\\" + f+'\n')
break else:
with open (os.getcwd()+'\\diff.txt','a') as di:
di.write("File Name=%s EEresource file size:%d != SVN file size:%d" %(f,sA,sB)+'\n') #print ("File Name=%s EEresource file size:%d != SVN file size:%d" %(f,sA,sB)) # 处理仅出现在一个目录中的文件
onlyFiles = setA ^ setB
aonlyFiles = []
bonlyFiles = []
for of in onlyFiles:
if of in afiles:
aonlyFiles.append(of)
elif of in bfiles:
bonlyFiles.append(of)
#print ("###################### EE resource ONLY ###########################")
#print ("#only files in ", apath)
for of in sorted(aonlyFiles):
with open (os.getcwd()+'\\EEonly.txt','a') as ee:
ee.write(of+'\n') #print (of)
#print ("*"*20+"SVN ONLY+"+"*"*20)
#print ("#only files in ", bpath)
for of in sorted(bonlyFiles):
with open (os.getcwd()+'\\svnonly.txt','a') as svn:
svn.write(of+'\n')
#print (of)
if __name__ == '__main__':
FolderEE = 'D:\\search\\bb\\ObjectGroup - Copy\\ObjectGroup\\Built-in'
FolderSVN = 'D:\\search\\bb\\ObjectGroup\\ObjectGroup\\Built-in'
dirCompare(FolderEE, FolderSVN)
print("done!")
使用python实现两个文件夹里文件的对比(包含内容的对比)的更多相关文章
- D盘Program Files 文件夹里文件不显示,没隐藏。怎么才能显示出来?
D盘里有两个一模一样的Program Files 文件夹,文件夹里文件不显示,没隐藏.怎么才能显示出来?新买不久的电脑,win8.1系统 点击开始---运行---输入“cmd”(没有引号)---在弹出 ...
- VBA读取文件夹下所有文件夹及文件内容,并以树形结构展示
Const TR_LEVEL_MARK = "+"Const TR_COL_INDEX = "A"Const TR_COL_LEVEL = "E&qu ...
- python 批量创建文件及文件夹(文件夹里再创文件)
python 批量创建文件及文件夹(文件夹里再创文件)思路:文件建到哪>文件名字叫啥>创建文件夹>去新建的文件下>新建文件>给文件里边写东西>写个反馈给控制台> ...
- diff两个文件夹里的东西
diff --help -x, --exclude=PAT exclude files that match PAT 排除某个类型的文件 -u, -U NUM, --uni ...
- python 计算文件夹里所有内容的大小总和
计算文件夹里所有内容的大小总和 递归方法 '''计算文件夹的大小''' import os def dir_file_size(path): if os.path.isdir(path): file_ ...
- Python 文件夹及文件操作
import os import os.path from shutil import copy def copyfile(src, dst): count = 1 for filename in o ...
- Python学习(九)IO 编程 —— 文件夹及文件操作
Python 文件夹及文件操作 我们经常会与文件和目录打交道,对于这些操作,python可以使用 os 及 shutill 模块,其中包含了很多操作文件和目录的函数. os 可以执行简单的文件夹及文件 ...
- OpenCV玩耍(一)批量resize一个文件夹里的所有图像
鉴于用caffe做实验的时候,里面牵扯到一个问题是必须将训练集和测试集都转成256*256的图像,而官网给出的代码又不会用,所以我用opencv转了.其实opencv只转一幅图会很简单,关键在于“批量 ...
- (转)android res文件夹里面的drawable(ldpi、mdpi、hdpi、xhdpi、xxhdpi)
android res文件夹里面的drawable(ldpi.mdpi.hdpi.xhdpi.xxhdpi) (1)drawable-hdpi里面存放高分辨率的图片,如WVGA (480x800),F ...
随机推荐
- sql备份命令
--将SQL脚本赋值给变量 ) set @SqlBackupDataBase=N'BACKUP DATABASE dbname TO DISK = ''E:\DBBackup\dbname-'+ ), ...
- Wi-Fi基带芯片和Wi-Fi无线网卡设计方案
转:http://wenku.baidu.com/link?url=Q0ImC 0IIG7qrbB8DpGrrU3aOYvxNYCyHsxukspH8XMCDYMjYMPSJq_TCISC5amsNY ...
- 理解Android Build系统【转】
本文转载自:http://www.ibm.com/developerworks/cn/opensource/os-cn-android-build/ Android Build 系统是用来编译 And ...
- bat定时检测系统服务是否开启
@echo offrem 定义循环间隔时间和监测的服务:set secs=90set srvname="Apache2a" echo.echo ================== ...
- 内网批量测试登录机器工具,并且dir 目标机器c盘
// Ipc.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <stdio.h> #include <w ...
- Regular Expression Matching,regex,正则表达式匹配,利用动态规划
问题描述:Implement regular expression matching with support for '.' and '*'. '.' Matches any single char ...
- Python词云的中文问题
image= Image.open('F:/__identity/course/建模/九寨沟地震/四川地图.jpg') fig = plt.figure(figsize=(20, 16)) graph ...
- js命令模式
命令模式(Command),将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤销的操作. 从命令模式的结构图可以看出,它涉及到五个角色,它们分别是 ...
- 《Think in Java》(六)访问权限控制
类访问权限:public,default(包访问权限的类,在包外可以调用该类的static成员) 类属性访问权限:public,protected,default,private
- tagclass,taglib,tld设置
<tag> <name>dateOutput</name> <tagclass>tags.DateOutput</tagclass> // ...