Сравните определенный раздел текстового файла с другим текстовым файлом - PullRequest
0 голосов
/ 08 января 2020

У меня есть файл с именем fileOne.txt , как показано ниже

mystring:
   keyFile: enable
   clusterAuthMode: enable
   authorization: string
   transitionToAuth: boolean
   javascriptEnabled:  enable
   redactClientLogData: boolean

security:
   keyFile: string
   clusterAuthMode: disable
   authorization: string
   transitionToAuth: boolean
   javascriptEnabled:  enable
   redactClientLogData: boolean

test:
   keyFile: disable
   clusterAuthMode: enable
   authorization: string
   transitionToAuth: boolean
   javascriptEnabled: enable
   redactClientLogData: boolean

stack:
   keyFile: string
   clusterAuthMode: enable
   authorization: string
   transitionToAuth: boolean
   javascriptEnabled: enable
   redactClientLogData: enable

И еще один файл с именем FileTwo.txt , как показано ниже

security:
   keyFile: string
   clusterAuthMode: enable
   authorization: string
   transitionToAuth: boolean
   javascriptEnabled: enable

Мне нужно проверить, существует ли контекст FileTwo.txt в FileOne.txt или нет. И распечатайте Совпадение или Не совпало или не найдено.

ВЫХОД - Matched - security: Matched - keyFile: string NOT Matched - clusterAuthMode: disable Matched - authorization: string NOT Matched - FileString: boolean Matched - javascriptEnabled: enable NOT Found - redactClientLogData: boolean

Ответы [ 2 ]

0 голосов
/ 08 января 2020

Код:

import yaml  # pip install pyyaml


def read_yaml(file):
    with open(file, 'r') as f:
        return yaml.safe_load(f)


def compare(a, b):
    for key in a:
        if key not in b:
            # print('NOT Found - {}'.format(key))
            continue

        print('Matched - {}'.format(key))
        for sub_key, sub_value in a[key].items():
            if sub_key not in b[key]:
                print('NOT Found - {}: {}'.format(sub_key, sub_value))
            else:
                if sub_value == b[key][sub_key]:
                    print('Matched - {}: {}'.format(sub_key, sub_value))
                else:
                    print('NOT Matched - {}: {}'.format(sub_key, sub_value))


f1 = read_yaml('FileOne.txt')
f2 = read_yaml('FileTwo.txt')
compare(f1, f2)

Выход:

Matched - security
Matched - keyFile: string
NOT Matched - clusterAuthMode: disable
Matched - authorization: string
Matched - transitionToAuth: boolean
Matched - javascriptEnabled: enable
NOT Found - redactClientLogData: boolean
0 голосов
/ 08 января 2020

Упомянутые вами txt-файлы имеют формат yaml. Если вы не знаете о yaml, тогда, пожалуйста, go - https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html

Синтаксический анализ yaml довольно прост в python. python поставляется с yaml модулем. Вы можете использовать приведенную ниже команду для его установки, если при импорте модуля yaml вы получаете ошибку импорта.

pip install pyyaml

Если вы уверены в установке модуля yaml, пожалуйста, используйте ниже код

import yaml
with open("FileOne.txt") as fh:
    data1 = yaml.load(fh)
with open("FileTwo.txt") as fh:
    data2 = yaml.load(fh)
for key in data2.keys():
    if key not in data1.keys():
        continue
    else:
        print "Matched - %s"%(key)
        x = data1[key]
        y = data2[key]
        for k in y:
            if k in y and x[k] == y[k]:
                print "Matched - %s: %s"%(k, y[k])
            else:
                print "NOT Matched - %s: %s"%(k, y[k])

Я надеюсь, что это соответствует тому, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...