python比较2个xml内容的方法

本文实例讲述了python比较2个xml内容的方法。分享给大家供大家参考。具体分析如下:

from xml.etree import ElementTree
OK=True
main_pid = 10000
loop_depth = 0
def compare_xml(left, right, key_info='.'):
  global loop_depth
  loop_depth += 1
  if loop_depth == 1: print
  if left.tag != right.tag:
    print_diff(main_pid, key_info, 'difftag', left.tag, right.tag)
    return
  if left.text != right.text:
    print_diff(main_pid, key_info, 'difftext', left.text, right.text)
    return
  leftitems = dict(left.items())
  rightitems = dict(right.items())
  for k,v in leftitems.items():
    if k not in rightitems:
      s = '%s/%s' % (key_info, left.tag)
      print_diff(main_pid, s, 'lostattr', k, "")
  for k,v in rightitems.items():
    if k not in leftitems:
      s = '%s/%s' % (key_info, right.tag)
      print_diff(main_pid, s, 'extraattr', "", k)
  leftnodes = left.getchildren()
  rightnodes = right.getchildren()
  leftlen = len(leftnodes)
  rightlen = len(rightnodes)
  if leftlen != rightlen:
    s = '%s/%s' % (key_info, right.tag)
    print_diff(main_pid, s, 'difflen', leftlen, rightlen)
    return
  l = leftlen<rightlen and leftlen or rightlen
  d = {}
  for i in xrange(l):
    node=leftnodes[i]
    if node.tag not in d:
      d[node.tag] = 1
      tag = node.tag
    else:
      tag = node.tag + str(d[node.tag])
      d[node.tag] += 1
    s = '%s/%s' % (key_info, tag)
    compare_xml(leftnodes[i], rightnodes[i], s)
def print_diff(main_pid, key_info, msg, base_type, test_type):
  global OK
  info = u'[ %-5s ] %s -> %-40s [ %s != %s ]'%(msg.upper(), main_pid, key_info.strip('./'), base_type, test_type)
  print info.encode('gbk')
  OK = False

调用:

if __name__ == '__main__':
  s1 = '''''<?xml version="1.0" encoding="UTF-8"?> \
     <employees> \
     <employee id = '1'> \
      <name>linux</name>\
      <age>30</age>\
     </employee>\
     <employee id = '2'> \
      <name>windows</name>\
      <age>20</age>\
     </employee>\
     </employees>'''
  s2 = '''''<?xml version="1.0" encoding="UTF-8"?> \
     <employees> \
     <employee id = '3'> \
      <name>windows</name>\
      <age>20</age>\
     </employee>\
     <employee id = '4'> \
      <name>linux</name>\
      <age>30</age>\
     </employee>\
     </employees>'''
  lroot = ElementTree.fromstring(s1)
  rroot = ElementTree.fromstring(s2)
  compare_xml(lroot, rroot)

希望本文所述对大家的Python程序设计有所帮助。

(0)

相关推荐

  • python比较两个列表是否相等的方法

    本文实例讲述了python比较两个列表是否相等的方法.分享给大家供大家参考.具体如下: 这里演示了 == 和 is两种方法的区别: L1 = [1, ('a', 3)] # same value, unique objects L2 = [1, ('a', 3)] print L1 == L2, L1 is L2 # equivalent?, same object? 运行结果如下: True False 希望本文所述对大家的Python程序设计有所帮助.

  • Python判断文件和文件夹是否存在的方法

    一.python判断文件和文件夹是否存在.创建文件夹 复制代码 代码如下: >>> import os >>> os.path.exists('d:/assist') True >>> os.path.exists('d:/assist/getTeacherList.py') True >>> os.path.isfile('d:/assist') False >>> os.path.isfile('d:/assis

  • Python编程实现两个文件夹里文件的对比功能示例【包含内容的对比】

    本文实例讲述了Python编程实现两个文件夹里文件的对比功能.分享给大家供大家参考,具体如下: #-*-coding:utf-8-*- #=============================================================================== # 目录对比工具(包含子目录 ),并列出 # 1.A比B多了哪些文件 # 2.B比A多了哪些文件 # 3.二者相同的文件:文件大小相同 VS 文件大小不同 (Size相同文件不打印:与Size不同文件显

  • python比较两个列表大小的方法

    本文实例讲述了python比较两个列表大小的方法.分享给大家供大家参考.具体如下: L1 = [1, ('a', 3)] L2 = [1, ('a', 2)] print L1 < L2, L1 == L2, L1 > L2 # less,equal,greater: tuple of results 运行结果如下: False False True 希望本文所述对大家的Python程序设计有所帮助.

  • Python比较两个图片相似度的方法

    本文实例讲述了Python比较两个图片相似度的方法.分享给大家供大家参考.具体分析如下: 这段代码实用pil模块比较两个图片的相似度,根据实际实用,代码虽短但效果不错,还是非常靠谱的,前提是图片要大一些,太小的图片不好比较.附件提供完整测试代码和对比用的图片. 复制代码 代码如下: #!/usr/bin/python # Filename: histsimilar.py # -*- coding: utf-8 -*- import Image def make_regalur_image(img

  • Python通过PIL获取图片主要颜色并和颜色库进行对比的方法

    本文实例讲述了Python通过PIL获取图片主要颜色并和颜色库进行对比的方法.分享给大家供大家参考.具体分析如下: 这段代码主要用来从图片提取其主要颜色,类似Goolge和Baidu的图片搜索时可以指定按照颜色搜索,所以我们先需要将每张图片的主要颜色提取出来,然后将颜色划分到与其最接近的颜色段上,然后就可以按照颜色搜索了. 在使用google或者baidu搜图的时候会发现有一个图片颜色选项,感觉非常有意思,有人可能会想这肯定是人为的去划分的,呵呵,有这种可能,但是估计人会累死,开个玩笑,当然是通

  • 使用Python的PIL模块来进行图片对比

    在使用google或者baidu搜图的时候会发现有一个图片颜色选项,感觉非常有意思,有人可能会想这肯定是人为的去划分的,呵呵,有这种可能,但是估计人会累死, 开个玩笑,当然是通过机器识别的,海量的图片只有机器识别才能做到. 那用python能不能实现这种功能呢?答案是:能 利用python的PIL模块的强大的图像处理功能就可以做到,下面上代码: import colorsys def get_dominant_color(image): #颜色模式转换,以便输出rgb颜色值 image = im

  • python遍历文件夹并删除特定格式文件的示例

    复制代码 代码如下: #!/usr/bin/python# -*- coding: utf-8 -*- import os def del_files(path):    for root , dirs, files in os.walk(path):        for name in files:            if name.endswith(".tmp"):                os.remove(os.path.join(root, name))  pri

  • Python列出一个文件夹及其子目录的所有文件

    python简介 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年. 像Perl语言一样, Python 源代码同样遵循 GPL(GNU General Public License)协议. >>> import os >>> for i in os.walk("."): ... print i[0],"\n##"

  • Python高级应用实例对比:高效计算大文件中的最长行的长度

    前2种方法主要用到了列表解析,性能稍差,而最后一种使用的时候生成器表达式,相比列表解析,更省内存 列表解析和生成器表达式很相似: 列表解析 [expr for iter_var in iterable if cond_expr] 生成器表达式 (expr for iter_var in iterable if cond_expr) 方法1:最原始 复制代码 代码如下: longest = 0f = open(FILE_PATH,"r")allLines = [line.strip()

  • Python实现比较两个文件夹中代码变化的方法

    本文实例讲述了Python实现比较两个文件夹中代码变化的方法.分享给大家供大家参考.具体如下: 这里将修改代码后的目录与原始目录做对比,罗列出新增的代码文件,以及修改过的代码文件 # -*- coding: utf-8 -*- import os; folderA = "F:\\Projects\\FreeImageV3_14_1\\".lower(); folderB = u"E:\\Software\\图像解码库\\FreeImage3141\\FreeImage\\&q

  • Python比较文件夹比另一同名文件夹多出的文件并复制出来的方法

    本文实例讲述了Python比较文件夹比另一同名文件夹多出的文件并复制出来的方法.分享给大家供大家参考.具体如下: 这个东东本来是做来给公司数据同步用的:新服务器还没正式启用,旧的服务器还在使用,每天都有大量图片传到旧服务器上面,为了避免备份全部图片,所以写了这么个工具. 1. 运行效果如下图所示: 2. Python代码如下: 复制代码 代码如下: # coding=gbk ''' Created on 2011-1-7 @author: HH ''' import os,ConfigParse

随机推荐