У меня такой код:


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
jamjam46 15 Фев 2021 в 17:24

1 ответ

Лучший ответ

Вы открываете файл в режиме w+, перезаписывая все предыдущее содержимое, вызывая иллюзию того, что он находит только один результат. Измените свои строки с помощью open, например, чтобы использовать режим 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
1
Abdul Aziz Barkat 15 Фев 2021 в 14:27