python - Python re 模块在使用 findall 时返回空白条目
问题描述
我正在尝试编写一个 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']]
解决方案
_line
无论命中与否,您都将附加到。仅_list
在您受到打击时附加到:
found = re.findall(r'[^/]*\.js',line)
if found:
_list.append(found)
此外,关于唯一性的第二部分可能可以作为一个集合来实现:
unique = set(_list)
.. 您当前的实现搜索整个列表(或至少直到命中)每个插入,随着条目数量开始增加,这是非常低效的。
您也可以通过仅使用文件名本身作为字典中的键来实现它,然后调用name_of_dict.keys()
以仅获取键(这将是唯一的)。dict 是一个哈希表,这意味着在大多数情况下插入是 O(1) - 即常量,而不是取决于字典的大小(这in
将用于列表)。
推荐阅读
- html - 当我单击锚标记的 ext 时,它不会将我带到另一个页面
- python - 在 Pandas DataFrame 中创建列的用户输入
- javascript - 在逗号分隔字符串的每个第一个位置插入一个文本元素
- javascript - 无法使用 expo-cli 安装反应原生依赖项
- php - 在登录过程中添加操作
- java - 使用 mvn 函数在本地运行 gcp 云函数:使用 ENV 变量运行
- javascript - 捕获我导出的 async/await 函数的错误
- sql - 从列表中选择或选择 SQL 中的所有值
- scala - 同时 HTTP 请求的数量限制为四个
- flutter - Flutter Flexible 不会占用整个空间