【发布时间】:2022-01-09 21:35:11
【问题描述】:
我编写了一个包含正则表达式的函数来分隔txt 文件的一些特殊部分。代码工作正常,但我想得到一个字典作为输出,长度应该是 979:
import re
def logs():
with open("C:/Users/ASUS/Desktop/logdata.txt", "r") as file:
logdata = file.read()
pattern = '''
(?P<host>\d{1,}\.\d{1,}\.\d{1,}\.\d{1,}) # host name
\s+\S+\s+
(?P<user_name>(?<=-\s)(\w+|-)(?=\s))\s+\[ # user_name
(?P<time>([^[]+))\]\s+" # time
(?P<request>[^"]+)" # request
'''
for item in re.finditer(pattern, logdata, re.VERBOSE):
print(item.groupdict())
这个函数应该变成这样的文本:
146.204.224.152 - feest6811 [21/Jun/2019:15:45:24 -0700] "POST /incentivize HTTP/1.1" 302 4622
到此捕获host、user_name 等:
{"host":"146.204.224.152",
"user_name":"feest6811",
"time":"21/Jun/2019:15:45:24 -0700",
"request":"POST /incentivize HTTP/1.1"}
我该怎么做?
【问题讨论】:
-
目前输出什么?
-
@mkrieger1 感谢您的回答。我只是使用
my_list = re.findall(pattern, logdata, re.VERBOSE)而不是 for 循环,它会输出一个列表。 -
你的代码是
print(item.groupdict()),而不是my_list = ...。它输出什么? -
我刚刚编辑了代码。请检查它知道。它返回一个列表。
-
当你不想要一个列表时,你为什么要更改代码以返回一个列表?如果你想要一本字典,为什么不保留打印字典的代码?
标签: python python-3.x dictionary for-loop