【发布时间】:2021-01-07 15:37:24
【问题描述】:
我有以下 txt 文件:
197.109.77.178 - kertzmann3129 [21/Jun/2019:15:45:25 -0700] "DELETE /virtual/solutions/target/web+services HTTP/2.0" 203 26554
156.127.178.177 - okuneva5222 [21/Jun/2019:15:45:27 -0700] "DELETE /interactive/transparent/niches/revolutionize HTTP/1.1" 416 14701
100.32.205.59 - ortiz8891 [21/Jun/2019:15:45:28 -0700] "PATCH /architectures HTTP/1.0" 204 6048
168.95.156.240 - stark2413 [21/Jun/2019:15:45:31 -0700] "GET /engage HTTP/2.0" 201 9645
71.172.239.195 - dooley1853 [21/Jun/2019:15:45:32 -0700] "PUT /cutting-edge HTTP/2.0" 406 24498
180.95.121.94 - mohr6893 [21/Jun/2019:15:45:34 -0700] "PATCH /extensible/reinvent HTTP/1.1" 201 27330
我想创建一个函数,将这些转换为多个字典,其中每一行都是一个字典:
example_dict = {"host":"146.204.224.152", "user_name":"feest6811", "time":"21/Jun/2019:15:45:24 -0700", "request":"POST /incentivize HTTP/1.1"}
到目前为止,我能够做到这一点,为所有项目创建 4 个列表,但我不知道如何为每行创建多个 dic:
import re
def logs():
with open("assets/logdata.txt", "r") as file:
logdata = file.read()
host = (re.findall('(.*?)\-',logdata))
username = re.findall('\-(.*?)\[',logdata)
time = re.findall('\[(.*?)\]', logdata)
request = re.findall('\"(.*?)\"',logdata)
#for line in range(len(logdata)):
#dc = {'host':host[line], 'user_name':user_name[line], 'time':time[line], 'request':request[line]}
【问题讨论】:
-
那么你想要一个字典列表吗?您注释掉的代码的当前错误是什么?
-
它说语法错误。不,我想要文本文件的每一行都有一个字典
-
您能否将准确的语法错误复制并粘贴到问题中?
-
尝试将所有部分放入一个正则表达式中,每个组的位置将不可能出现误报,因为当您单独匹配一个小部分时。使用regex101.com 可以帮助您根据测试数据查看匹配组。
-
很抱歉说:“列表索引超出范围”
标签: python regex list dictionary