Python re модуль возвращает пустые записи при использовании findall - PullRequest
0 голосов
/ 05 апреля 2020

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

import re

_logf = open('access_log.txt')
_list = []
_uniq = []

for line in _logf:        
    _list.append(re.findall(r'[^/]*\.js',line))

for item in _list:
    if item not in _uniq:
        _uniq.append(item)

print(sorted(_uniq))

Выводимый список содержит пустой список следующим образом. Я попытался добавить + к регулярному выражению вместо *, но вывод остался прежним.

[[], ['jquery.js'], ['jquery.jshowoff.min.js'], ['jquery.jshowoff2.js']]

Ответы [ 2 ]

0 голосов
/ 05 апреля 2020

Вы просматриваете текстовый документ построчно, поэтому может случиться так, что совпадения не найдены, и метод findAll() также не найдет совпадений, а затем пустой список []. Попробуйте полностью прочитать документ или отфильтровать пустой элементы списка с использованием другого l oop или понимания списка.

См. Документацию для получения дополнительной информации о re.findAll (): https://docs.python.org/3/library/re.html

0 голосов
/ 05 апреля 2020

Вы добавляете к _line независимо от того, был ли сделан удар или нет. Добавлять к _list можно только в том случае, если вы получили удар:

found = re.findall(r'[^/]*\.js',line)

if found:
    _list.append(found)

Кроме того, вторая часть об уникальности, вероятно, может быть реализована в виде набора:

unique = set(_list)

.. вашей текущей реализации выполняет поиск по всему списку (или, по крайней мере, до тех пор, пока не будет выполнено обращение) для каждой вставки, что крайне неэффективно, так как число записей начинает расти.

Вы также можете реализовать его, используя только имя файла как ключ в словаре, затем вызывая name_of_dict.keys(), чтобы получить только ключи (которые будут уникальными). DICT - это таблица ha sh, означающая, что для большинства случаев вставки являются O (1) - то есть постоянными, а не в зависимости от размера словаря (который in будет делать для списка).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...