Удаление элементов списка строк, индексами которого являются значения элементов другого списка
Есть лог-файл большого объема text.log, в нем необходимо найти строки, которые содержат записи, попадающие под регулярку, затем эти строки из списка text удалить, значения элементов списка ip_list_numbers как раз и будут индексами списка text.
Как удалить элементы списка text, индексы которых являются значениями списка ip_list_numbers?
import re
f = open('text.log')
text = f.readlines()
ip_list_numbers = []
for line in text:
i += 1
result = re.search(r'\{\"ip\"\:\[\"(?P<ip>\d+\.\d+\.\d+\.\d+)\"', str(text))
if result:
ip_list_numbers.append(i)
f.close()
Ответы (1 шт):
Для удаления из списка используйте оператор del или метод pop (разница в том, что pop возвращает элемент), сам список строк нужно развернуть, чтобы удаление было с конца списка, т.к. уменьшение размера списка не актуализируется с текущим индексом и самое безобидное это приведет к выходу за пределы списка, а может удалить неправильный элемент.
Пример:
import re
with open('text.log') as f:
lines = f.readlines()
ip_list_numbers = []
for i, line in reversed(list(enumerate(lines))):
result = re.search(r'\{\"ip\"\:\[\"(?P<ip>\d+\.\d+\.\d+\.\d+)\"', line)
if result:
ip_list_numbers.append(i)
lines.pop(i)
PS.
Вместо enumerate:
for i, line in reversed(list(enumerate(lines))):
...
можно использовать range:
for i in reversed(range(len(lines))):
line = lines[i]
...