Python сравнивает две строки и проверяет определенные значения подстроки

#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]))
 
  1. Используется xml.etree.ElementTree для синтаксического анализа такого рода Str объектов.
  2. compare_strings Функция принимает список strings в качестве аргумента и имя атрибута, который она должна сравнивать.
  3. Затем он перебирает их все и сохраняет 'Description' атрибут.
  4. Наконец, он проверяет, совпадают ли все описания. Если они совпадают: возвращает True , если нет: возвращает False

Комментарии:

1. Спасибо! Я попробовал это, и я думаю, что это сделает то, что мне нужно

2. Но что делать, если между ними есть пробелы? Если я хочу, например, проверить имя поля? Поскольку описание состоит из 1 слова и принимает его как ключ, но в имени поля принимает только имя в качестве ключа

3. Тогда строка не соответствует XML стандарту. И вам следует подумать о том, чтобы лучше отформатировать его, например: fieldName или field_name .