【问题标题】:Find Occurance of False Detections with Python使用 Python 查找错误检测的发生
【发布时间】:2018-06-21 19:34:03
【问题描述】:

我正在尝试计算扫描检测到文件为假的次数。我尝试查看诸如Looking for a specific value in JSON file 之类的链接,但它并没有解决我的问题。此外,我没有过多地使用 API,因此非常感谢任何帮助。

这是我目前所拥有的。

# Making the API call
url = 'https://www.virustotal.com/vtapi/v2/file/report'
params = {'apikey': api_key, 'resource': sha1_num}

response = requests.get(url, params=params)
allJson = response.json()
data = json.dumps(allJson)

count = 0

item_dict = json.loads(data)
print len(item_dict['scans']

for entry in data['scans']:
    if entry['detected'] == 'false':
        count += 1
print (count)

而且,这就是 sublime.exe 在 vi​​rustotal 上的结果

{
  "scans": {
    "Bkav": {
      "detected": false,
      "version": "1.3.0.9466",
      "result": null,
      "update": "20180619"
    },
    "MicroWorld-eScan": {
      "detected": false,
      "version": "14.0.297.0",
      "result": null,
      "update": "20180619"
    },
    "CMC": {
      "detected": false,
      "version": "1.1.0.977",
      "result": null,
      "update": "20180619"
    },
    "CAT-QuickHeal": {
      "detected": false,
      "version": "14.00",
      "result": null,
      "update": "20180619"
    },
    "ALYac": {
      "detected": false,
      "version": "1.1.1.5",
      "result": null,
      "update": "20180619"
    },

【问题讨论】:

  • 那么,您当前的代码有什么问题?如果您遇到异常,请发布完整的回溯。如果您得到的计数不正确或其他情况,请告诉我们您的预期以及您得到的结果。

标签: python json api


【解决方案1】:

我很确定这个循环:for entry in data['scans']: 不会做你想做的事。您正在迭代的 data['scans'] 是一个字典,当您在字典上迭代时,您会得到它的键(在您的数据中,它们是不同测试的名称)。您的代码需要获取字典而不是密钥字符串,因此无法正常工作。

尝试使用for entry in data['scans'].values(): 遍历字典的值。你可能还想测试布尔值False,而不是字符串'false',因为Python 的json 解析器会为你转换它(你可以做if not entry['detected']:)。

【讨论】:

  • 我的新代码段是:for entry in data['scans'].values(): if entry['detected'] == false: count += 1 print (count) 错误是它说line 33, in <module> for entry in data['scans'].values(): TypeError: string indices must be integers
  • 哦,data 是一个字符串。这很奇怪。您似乎正在将您的数据解码成字典(使用response.json()),然后重新编码(使用json.dumps)并再次解析(json.loads),然后继续使用您拥有的编码版本中间。将循环中的data 替换为allJsonitem_dict(应该具有相同的内容)。也许考虑摆脱过度的解析和重新解析!
  • 好的,所以我评论了 item_dict = json.loads(allJson) 并将 for 循环更改为 for entry in allJson['scans'].values(): if entry['detected'] == false: count += 1 print (count) 。但是,我遇到了与line 33, in <module> for entry in allJson['scans'].values(): TypeError: string indices must be integers 相同的错误。有什么我没有看到的吗?我试图玩弄它,但仍然没有成功。
  • 听起来您仍然不确定哪些变量是字符串,哪些是已解析的字典。我建议打印出他们的reprs 和他们的types,并确保您正在索引和迭代字典。 Stack Overflow 并不是获得交互式调试帮助的好地方。
猜你喜欢
  • 2021-11-21
  • 1970-01-01
  • 2020-02-03
  • 2013-12-08
  • 1970-01-01
  • 1970-01-01
  • 2014-09-26
  • 2016-02-15
  • 2020-02-07
相关资源
最近更新 更多