收到错误:“ TypeError:字符串索引必须为整数”。卡在字典部分

时间:2019-08-10 23:00:17

标签: python json python-3.x

我有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:目前在字典上很烂

1 个答案:

答案 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希望是这种情况。