注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Code@Pig Home

喜欢背着一袋Code傻笑的Pig .. 忧美.欢笑.记忆.忘却 .之. 角落

 
 
 

日志

 
 

[python] 目录对比小工具  

2011-11-30 16:42:59|  分类: lang_python |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
写了个简单的目录对比工具,方便在脚本中使用。:)

---------------------------------------------------------------------------
import sys
import os
from os import path

def usage():
print "python filediff.py <file1 or dir1> <file2 or dir2>"

def filediff(file1, file2):
f1 = open(file1, 'rb')
f2 = open(file2, 'rb')

while True:
s1 = f1.read(8196)
s2 = f2.read(8196)
if len(s1) == 0 and len(s2) == 0:
break

if s1 != s2:
return False

return True

def dirdiff(dir1, dir2):
pathmap = {}   # 'subfilename' : {'p1':path1, 'p2':path2},
for root, dirs, files in os.walk(dir1):
for filename in files:
filename = path.join(root, filename)
subfilename = filename.replace(dir1, '')
pathmap.setdefault(subfilename, {})['p1'] = filename

for root, dirs, files in os.walk(dir2):
for filename in files:
filename = path.join(root, filename)
subfilename = filename.replace(dir2, '')
pathmap.setdefault(subfilename, {})['p2'] = filename

for k, v in pathmap.iteritems():
if v.has_key('p1') and v.has_key('p2'):
identical = filediff(v['p1'], v['p2'])
if not identical:
print '%s%*s not-identical' % (k, 40-len(k), '')
elif v.has_key('p1'):
print '%s%*s only in %s' % (k, 40-len(k), '', dir1)
else:
print '%s%*s only in %s' % (k, 40-len(k), '', dir2)

if __name__ == '__main__':
if len(sys.argv) != 3:
usage()
sys.exit(1)

file1 = path.realpath(sys.argv[1])
file2 = path.realpath(sys.argv[2])
if file1 == file2:
print 'file/dir name equal!', file1
sys.exit(0)
if path.isfile(file1) and path.isfile(file2):
print '-------------------------------------------'
print file1, file2, "equal" if filediff(file1, file2) else "not-equal"
print '-------------------------------------------'
print 'done!'
elif path.isdir(file1) and path.isdir(file2):
print '-------------------------------------------'
dirdiff(file1, file2)
print '-------------------------------------------'
  print 'done!'
 else:
  print 'no diff! are you sure dir/file exists?'
---------------------------------------------------------------------------
E:\>python filediff.py xxoo cool
\game\aaa.exe        only in E:\cool
\game\bbb.xml        only in E:\cool
\game\ccc.dat        not-identical
---------------------------------------------------------------------------
  评论这张
 
阅读(1292)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017