#python
#python
Вопрос:
Я выполняю задачу на Python и пытаюсь сравнить две строки кода и проверить определенную подстроку в обеих строках.
Пусть у нас будет пример: я читаю два файла, в которых есть эти строки
<Field Name="t" Description=" "/>
Первый файл
<Field Name="ta" Description="description1"/>
Второй файл
Чего я пытаюсь достичь, так это сравнить, есть ли разница между этими двумя описаниями.
Я пытался использовать функции типа any
or next
, но они возвращают логические значения и проверяют разницу для целых строк, где, как и здесь, мне нужно только проверить тип подстроки, которую я хочу найти.
Важно отметить, что я не использую обычное разделение или другие функции для определения начального индекса и конечного индекса, а также количества символов, которые я хочу. У меня есть список включений с текущими значениями:
matches=['Description="',etc]
Также у меня МОГУТ быть различия в других частях строки, например, например Field Name="something"
, как в приведенном выше примере эти 2 файла имеют разные имена полей, но мы заботимся только об описании.
А теперь вопрос. Можно ли использовать этот элемент списка для поиска этой подстроки в обеих строках двух файлов и проверки, отличаются ли они или нет? Мне нужно проверять только конкретные совпадения, которые у меня есть в этом списке совпадений.
Ответ №1:
Приведенный ниже код сделает свое дело:
import xml.etree.ElementTree as ET
s1 = '<Field Name="t" Description=" "/>'
s2 = '<Field Name="ta" Description="description1"/>'
s3 = '<Field Name="Doesnt matter that this is diffrent" Description="description1"/>'
def compare_strings(attribute, strings):
des = []
for string in strings:
tree = ET.fromstring(string)
des.append(tree.attrib[attribute])
if des and all(x == des[0] for x in des):
return True #They are the same
else:
return False #They are not the same
print("Are s1 adn s2 descriptions the same? ", compare_strings("Description", [s1, s2]))
print("Are s2 adn s3 descriptions the same? ", compare_strings("Description", [s2, s3]))
- Используется
xml.etree.ElementTree
для синтаксического анализа такого родаStr
объектов. compare_strings
Функция принимает списокstrings
в качестве аргумента и имя атрибута, который она должна сравнивать.- Затем он перебирает их все и сохраняет
'Description'
атрибут. - Наконец, он проверяет, совпадают ли все описания. Если они совпадают: возвращает
True
, если нет: возвращаетFalse
Комментарии:
1. Спасибо! Я попробовал это, и я думаю, что это сделает то, что мне нужно
2. Но что делать, если между ними есть пробелы? Если я хочу, например, проверить имя поля? Поскольку описание состоит из 1 слова и принимает его как ключ, но в имени поля принимает только имя в качестве ключа
3. Тогда строка не соответствует
XML
стандарту. И вам следует подумать о том, чтобы лучше отформатировать его, например:fieldName
илиfield_name
.