2016-02-29 5 views
3

Я пытаюсь сравнить текст со всеми экземплярами определенного тега в двух файлах XML. В OCR-модуле я использую вывод xml-файлов со всеми символами ocr в теге <OCRCharacters>...</OCRCharacters>.Использование diff с красивыми объектами супа

Я использую python 2.7.11 и красивый суп 4 (bs4). С терминала я называю свою программу python двумя именами файлов xml в качестве аргументов.

Я хочу извлечь все строки в теге <OCRCharacters> для каждого файла, сравнить их по строкам с помощью difflib и написать новый файл с отличиями.

Я использую $ python parse_xml_file.py file1.xml file2.xml для вызова программы с терминала.

Приведенный ниже код открывает каждый файл и печатает каждую строку в теге <OCRCharacters>. Как преобразовать объекты, созданные с помощью bs4 в строки, которые я могу использовать с difflib. Для этого я открыт для лучших способов (используя python).

import sys 

with open(sys.argv[1], "r") as f1: 
    xml_doc_1 = f1.read() 

with open(sys.argv[2], "r") as f2: 
    xml_doc_2 = f2.read() 

from bs4 import BeautifulSoup 
soup1 = BeautifulSoup(xml_doc_1, 'xml') 
soup2 = BeautifulSoup(xml_doc_2, 'xml') 

print("#####################",sys.argv[1],"#####################") 
for tag in soup1.find_all('OCRCharacters'): 
    print(repr(tag.string)) 
    temp1 = repr(tag.string) 
    print(temp1) 
print("#####################",sys.argv[2],"#####################")  
for tag in soup2.find_all('OCRCharacters'): 
    print(repr(tag.string)) 
    temp2 = repr(tag.string) 

ответ

1

Вы можете попробовать это:

import sys 
import difflib 
from bs4 import BeautifulSoup 

text = [[],[]] 
files = [] 
soups = [] 

for i, arg in enumerate(sys.argv[1:]): 
    files.append(open(arg, "r").read()) 
    soups.append(BeautifulSoup(files[i], 'xml')) 

    for tag_text in soups[i].find_all('OCRCharacters'): 
    text[i].append(''.join(tag_text)) 

for first_string, second_string in zip(text[0], text[1]): 
    d = difflib.Differ() 
    diff = d.compare(first_string.splitlines(), second_string.splitlines()) 
    print '\n'.join(diff) 

С xml1.xml:

<node> 
    <OCRCharacters>text1_1</OCRCharacters> 
    <OCRCharacters>text1_2</OCRCharacters> 
    <OCRCharacters>Same Value</OCRCharacters> 
</node> 

и xml2.xml:

<node> 
    <OCRCharacters>text2_1</OCRCharacters> 
    <OCRCharacters>text2_2</OCRCharacters> 
    <OCRCharacters>Same Value</OCRCharacters> 
</node> 

Выход будет:

- text1_1 
? ^

+ text2_1 
? ^

- text1_2 
? ^

+ text2_2 
? ^

    Same Value 

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

  • Нет связанных вопросов^_^