Как я могу заставить python непрерывно проверять наличие элемента в текстовом файле

#python #python-3.x #text

#python #python-3.x #текст

Вопрос:

У меня есть следующий код:

 
with open('file.txt', encoding="utf8") as inputFile:
    data = inputFile.readlines()
    inputFile.close()

for i, line in enumerate(data):
    if any([x in line for x in ['nl']]):
        with open("nl.txt", "w ") as nl:
            nl.write(line)
    if any([x in line for x in ['be']]):
        with open("be.txt", "w ") as be:
            be.write(line)
    if any([x in line for x in ['pl']]):
        with open("pl.txt", "w ") as pl:
            pl.write(line)
    if any([x in line for x in ['de']]):
        with open("de.txt", "w ") as de:
            de.write(line)

 

Этот код выполняет поиск ключевых слов в текстовом файле и, если он записывает всю строку в текстовый файл. Но по какой-то причине он останавливается после получения одного результата. Как я могу заставить его повторяться до тех пор, пока не будут проверены все строки в файле?

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

1. Пожалуйста, предоставьте пример входного файла и вывода вашего кода.

Ответ №1:

Вы открываете файл в режиме w перезаписи любого предыдущего содержимого, создавая иллюзию, что он находит только один результат. Измените свои строки с open помощью like so, чтобы использовать режим a :

 with open('file.txt', encoding="utf8") as inputFile:
    data = inputFile.readlines()
    inputFile.close()

for i, line in enumerate(data):
    if any([x in line for x in ['nl']]):
        with open("nl.txt", "a ") as nl:
            nl.write(line)
    if any([x in line for x in ['be']]):
        with open("be.txt", "a ") as be:
            be.write(line)
    if any([x in line for x in ['pl']]):
        with open("pl.txt", "a ") as pl:
            pl.write(line)
    if any([x in line for x in ['de']]):
        with open("de.txt", "a ") as de:
            de.write(line)
 

Или вы даже можете оставить файлы открытыми во время выполнения цикла, что-то вроде:

 with open("nl.txt", "w ") as nl:
    for i, line in enumerate(data):
        # Other code here