Как сравнить два файла, но игнорировать, если в разных строках (при сравнении двух файлов) - PullRequest
0 голосов
/ 23 января 2020

У меня есть этот код

 with open(newconfig, 'r') as file1:  # New File
    with open(goldconfig, 'r') as file2:  # Standard File
        difference = set(file1).difference(file2)

difference.discard('\n')

diff_file = input("INFO: Select what to name the difference(s) : ")
with open(diff_file, 'w') as file_out:
    for line in difference:
        file_out.write("** WARNING: Difference found in New Config:\n " + line + "\n")
        print("WARNING: Difference in file: " + line)

print("\n\n")
print("INFO: Difference File Created: " + diff_file)

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

Список один: TOM123 TOM1234 TOM12345

Список второй: TOMA TOMB TOM123 TOM1234 TOM12345

Разница:

TOMA TOMB

Ответы [ 2 ]

1 голос
/ 23 января 2020

Если вы хотите поместить строку текста в набор, вы можете сделать что-то вроде этого:

text = 'TOM1234 TOM1234 TOM12345 TOM123'
a = set([word for word in text.split()])
print(a)

Вывод

{'TOM123', 'TOM1234', 'TOM12345'}

Если вы хотите найти элементы, которые находятся только в одном из наборов, используйте symbric_difference.

a = set(['TOM123', 'TOM1234', 'TOM12345', 'TOM5'])
b = set(['TOMA', 'TOMB', 'TOM123', 'TOM1234', 'TOM12345'])
difference = a ^ b

print(difference)

Выход

{'TOM5', 'TOMA', 'TOMB'}
0 голосов
/ 23 января 2020

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

def open_file_and_return_list(file_path):
    list = []
    with open(file_path, 'r') as f:
        line = f.readline()
        while line:
            list.append(line)
            line = f.readline()
    return list

def clean_new_line(list):
    for i in range(len(list)):
        if "\n" in list[i]:
            list[i] = list[i].replace("\n", "")
    return list


if __name__ == "__main__":
    list1 = open_file_and_return_list(r"path\File1.txt")
    list2 = open_file_and_return_list(r"path\File2.txt")
    list1 = clean_new_line(list1)
    list2 = clean_new_line(list2)
    diff = []
    for obj in list1:
        if obj not in list2:
            diff.append(obj)
    for obj in list2:
        if obj not in list1:
            diff.append(obj)

    print(diff)
...