我有3个变量,其中包含3个字符串(日期,词组,IP地址) 想要将其以json格式显示为:
“YYYY-MM-DD” : { user: { "TOTAL": value, IPADDRESS: value } }
由于这3个变量位于for循环中(从日志文件中获取数据并逐行读取。因此,值存储在for循环中的变量中,并转换为字典)。
获取错误为:
File "parsing2.py", line 64, in <module>
main()
File "parsing2.py", line 51, in main
x[resultant_date][result_user]["TOTAL"] = user_count
TypeError: string indices must be integers
代码:
x = {}
for line in lines:
result_month = monthToNum(line[0:3])
result_year = 2018
result_day = line[4:6]
resultant_date = str(result_year) + "-" + str(result_month) + "-" + str(result_day)
if line.find("Failed password for") != -1:
s = line
result_user = re.search('Failed password for(.*)from', s).group(1)
result_ip = re.search('from(.*)port', s).group(1)
# print(str(resultant_date + " " + result_user + " " + result_ip))
if resultant_date not in date_array:
date_array.append(resultant_date)
x[resultant_date] = result_user
print(x)
user_count += 1
x[resultant_date][result_user]["TOTAL"] = user_count
print(x)
count_resultIP += 1
x[resultant_date][result_user][result_ip] = count_resultIP
print(x)
无法打印main()的倒数第二个打印功能。在上面的线上弄得一团糟。
如何解决此问题以获得所需的json格式? PS:目前在字典上很烂
答案 0 :(得分:1)
在您的代码中,您需要像这样设置result_user
:
result_user = re.search('Failed password for(.*)from', s).group(1)
.group(1)
将具有字符串或元组值,如here所示。
稍后您进行此作业:
x[resultant_date] = result_user
因此x[resultant_date]
也将具有相同的字符串值。
因此,当您尝试做
x[resultant_date][result_user]["TOTAL"] = user_count
您正在尝试索引x[resultant_date]
,该索引已经具有值result_user
,并且具有相同的值。
简而言之,您正在做的事情等同于以下内容:
result_user[result_user]
说result_user
的值为"foo"
,那么您在做
"foo"["foo"]
这没有多大意义。
之所以会出现该类型错误,是因为用"foo"[0]
之类的整数来索引字符串是有效的,而python希望是这种情况。