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

Я работаю над сценарием python, где в настоящее время, если определенный текстовый файл содержит определенные фразы, соответствующие списку, он удалит их из файла.

Соответствующие фрагменты кода списка выглядят следующим образом :

replacements = {'pc-123456 alert good-name-here':'',
                'pc-123456 alert remove-name-here':'',
}

Где первая половина в {- это прямой текст из файла оповещения, а: '' - это очистка текста из файла, если он совпадает. В настоящее время это работает.

Мне нужно добавить следующее в список замен в моем скрипте, где:

replacements = {'12-Dec-19 00:00 pc-123456 alert good-name-here':'',
                '12-Dec-19 00:01 pc-123456 alert remove-name-here':'',
                '12-Dec-19 00:01 pc-234567 alert remove-name-here':'',
}

Но я хочу удалить любую деталь, которая определена как 'remove- name-here '(включая дату / время, имя устройства и т. д. c)., даже если оповещение будет появляться на более чем 2 устройствах (например, p c -123456, p c -2345678, p c -356435, p c -4563255) et c.

Какой самый простой способ удалить всю текстовую строку, если сценарий получает другое имя устройства для того же имени оповещения, и удалить метку времени (которая в настоящее время не определена в списке замен)?

Остальная часть кода выглядит следующим образом:

lines = []
with open('path/to/file.txt') as infile:
    for line in infile:
        for src, target in replacements.items():
            line = line.replace(src, target)
        lines.append(line)

with open('path/to/same/file.txt', 'w') as outfile:
    for line in lines:
        outfile.write(line)

Спасибо.

1 Ответ

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

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


to_remove_endings = ['to_remove_ending']
lines = []

with open('path/to/file.txt') as infile:
    for line in infile:
        next_line = line
        for ending in to_remove_endings:
            if line.rstrip().endswith(ending):
                next_line = '\n'
                break
        lines.append(next_line)

with open('path/to/same/file.txt', 'w') as outfile:
    for line in lines:
        outfile.write(line)

Вы также можете искать подстроки:

unwanted = ['substring 1', 'substring 2']
lines = []

with open('path/to/file.txt') as infile:
    for line in infile:
        next_line = line
        for substring in unwanted:
            if substring in line:
                next_line = '\n'
                break
        lines.append(next_line)

with open('path/to/same/file.txt', 'w') as outfile:
    for line in lines:
        outfile.write(line)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...