Python - печать строк, которая существует в 2 файлах

У меня есть 2 файла, содержащие несколько строк, fileA.txt а также fileB.txt,

fileA.txt:

hello hi 
how

fileB.txt:

hello how are you

Я пытаюсь написать программу, которая увидит, существует ли строка в обоих файлах. Если это так, выведите строку или несколько строк.

Результаты будут выводить "привет" и "как", поскольку они существуют в обоих файлах.

У меня возникают проблемы при выполнении этого, так как я смог работать только с определенными мной строками, а не с неизвестными строками в файле:

with open("fileA.txt", 'r') as fileA, open ("fileB.txt") as fileB:
    for stringsA in fileA:

        for stringsB in fileB:

            if stringsA in stringsB:
                print("true")

Любая помощь будет оценена.

3 ответа

Решение

Файлы повторяются по строкам, а не по словам. Вам придется разделить слова:

>>> with open('fileA.txt') as a, open('fileB.txt') as b:
...     a_words = set(a.read().split())
...     b_words = set(b.read().split())
...     print('\n'.join(a_words & b_words))
...     
hello
how

Сначала вы хотите получить список всех уникальных строк в fileA, Затем получите аналогичный уникальный список для fileB, Тогда сравните два. С помощью setЭто делает сравнение проще.

def get_strings_from_file(f):
    return set([s.strip() for s in f.read().split() if s.strip()])

def main():
    with open("fileA.txt", 'r') as fileA, open ("fileB.txt") as fileB:
        stringsA = get_strings_from_file(fileA)
        stringsB = get_strings_from_file(fileB)
        return stringsA.intersection(stringsB)

Простым решением было бы создать список отдельных слов для каждого файла и проверить общие слова.

Тип данных Python Set будет очень полезен в этом случае. https://docs.python.org/3.6/library/stdtypes.html

Другие вопросы по тегам