2015-07-08 1 views
0

Я пытаюсь сравнить ниже приведены два XML-форматов в питоне, и хотел бы, чтобы ваши материалы на моем подходесравнение XML с помощью питона путаницы

Файл 1:

<p1:car>       
    <p1:feature car="111" type="color">511</p1:feature> 
    <p1:feature car="223" type="color">542</p1:feature> 
    <p1:feature car="299" type="color">559</p1:feature> 
    <p1:feature car="323" type="color">564</p1:feature> 
    <p1:feature car="353" type="color">564</p1:feature> 
    <p1:feature car="391" type="color">570</p1:feature> 
    <p1:feature car="448" type="color">570</p1:feature> 

    <p1:feature car="111" type="tires" unit="percent">511</p1:feature> 
    <p1:feature car="223" type="tires" unit="percent">513</p1:feature> 
    <p1:feature car="299" type="tires" unit="percent">516</p1:feature> 
    <p1:feature car="323" type="tires" unit="percent">516</p1:feature> 
    <p1:feature car="353" type="tires" unit="percent">518</p1:feature> 
    <p1:feature car="391" type="tires" unit="percent">520</p1:feature> 
    <p1:feature car="448" type="tires" unit="percent">520</p1:feature> 
</p1:car> 

Файл 2:

<p1:car>       
    <p1:feature car="111" type="color">511</p1:feature> 
    <p1:feature car="223" type="color">542</p1:feature> 
    <p1:feature car="299" type="color">559</p1:feature> 
    <p1:feature car="323" type="color">564</p1:feature> 
    <p1:feature car="353" type="color">564</p1:feature> 
    <p1:feature car="391" type="color">570</p1:feature> 
    <p1:feature car="448" type="color">570</p1:feature> 

    <p1:feature car="223" type="tires" unit="percent">513</p1:feature> 
    <p1:feature car="299" type="tires" unit="percent">516</p1:feature> 
    <p1:feature car="323" type="tires" unit="percent">516</p1:feature> 
    <p1:feature car="353" type="tires" unit="percent">518</p1:feature> 
    <p1:feature car="391" type="tires" unit="percent">520</p1:feature> 
    <p1:feature car="440" type="tires" unit="percent">520</p1:feature> 
</p1:car> 

Как вы можете присмотреться к тому, что в файле 2 нет строки <p1:feature car8="111" type="tires" unit="percent">511</p1:feature> в 2-ом абзаце, которая присутствует в файле 1.

Кроме того, в последней строке 2 пункта файла 2 его car="440", тогда как в файле 1 это car="448"

Что я хочу:

В файлах я имею дело есть множество таких различий, так вы, ребята, скажите мне, как распечатай такие недостающие строки и неравные числа из этих files.I хотят выхода в следующем виде:

In file two feature car="111", type="tires" and text = 511 is missing 
In file two car="448" whereas in file one it is car="440" 

Кроме того, вы можете предложить мне идеи и различные методы. Я застрял в этом вопросе с очень долгого времени и хочу немедленно решить эту проблему.

Что я пробовал:

Я использую LXML для работы сравнения, и я попытался с помощью для цикла в следующем порядке:

for i,j in zip(file1.getchildren(),file2.getchildren()): 
     if (int(i.get("car")) & int(i.text)) != (int(j.get("car")) & int(j.text)): 
       print "difference of both files" 

Благодаря линии к линии подхода сравнения я получаю все неправильные результаты, начиная со второго абзаца обоих файлов, так как одна строка отсутствует во втором файле.

+0

Возможно, стоит попробовать: https://pypi.python.org/pypi/xmldiff – mzjn

ответ

2

думаю, что вы хотите difflib. Пожалуйста, примите официальную документацию here.

В общих словах, что вы хотите:

from difflib import Differ 
text_1 = file_1.read() # getting XML contents 
text_2 = file_2.read() # getting XML contents from second file 
d = Differ() 
result = d.compare(text_1, text_2) 

Для получения дополнительной информации об использовании, пожалуйста, обратитесь к официальной документации.

+0

Благодарим вас за ввод. можно ли использовать difflib для сравнения частей файлов xml? если не весь документ. Поскольку структура моих xml-файлов очень сложна – Dhruvify

+1

@DhruvJ, если вы хотите углубиться в это сравнение XML, я бы предложил вам использовать для этой цели сторонние библиотеки, такие как '' xmldiff'' (доступный через pip) или '' formencode'' (доступно в BitBucket [здесь] (http://bitbucket.org/ianb/formencode/src/tip/formencode/doctest_xml_compare.py#cl-70)). Относительно второй библиотеки, есть аналогичное обсуждение [здесь] (http://stackoverflow.com/questions/3007330/xml-comparison-in-python). –

+0

-Menegazzo Я бы посмотрел на это. Спасибо вам за ваши предложения. – Dhruvify

Смежные вопросы