有一个从 json 数据生成字典的代码
json数据示例: 链接
代码本身
import os
import re
import json
import collections
# Initialization collection for all lvl
rule0 = collections.defaultdict(int) #
rule1 = collections.defaultdict(int) #
rule2 = collections.defaultdict(int) #
rule3 = collections.defaultdict(int) #
rule4 = collections.defaultdict(int) #
rule5 = collections.defaultdict(int) #
MY_RULE = {}
# run comandline for create json
# MY_PAT = os.system(r'pmd -d C:\Users\vsi\int\sfdevops_metrics\.project\na_gold\force-app\main\default\classes -R C:\Users\vsi\int\sfdevops_metrics\.project\na_gold\__PMD\GOLD_ruleset.xml -f json > C:\Users\vsi\int\sfdevops_metrics\.project\SM-774\output.json')
#open json
with open(r'C:\Users\vsi\int\sfdevops_metrics\.project\SM-774\output.json') as json_file:
MY_PATH = json.load(json_file, object_hook=None)
#refactor json
for values in MY_PATH['files']:
for i in values['violations']:
if i['priority'] == 1:
rule1[i['priority']] += 1
elif i.get('priority') == 2:
rule2[i['priority']] += 1
elif i.get('priority') == 3:
rule3[i['priority']] += 1
elif i.get('priority') == 4:
rule4[i['priority']] += 1
elif i.get('priority') == 5:
rule5[i['priority']] += 1
rule0[i['priority']] += 1
for key1 in values.items():
key1 = str(key1)
key1 = re.findall(r'C:.*', key1)
key1 = str(key1)
key1 = key1.replace(r'"C:\\\\Users\\\\vsi\\\\int\\\\sfdevops_metrics\\\\.project\\\\na_gold\\\\force-app\\\\main\\\\default\\\\classes\\\\', '')
key1 = key1.replace("')\"", '')
rule6 = str(rule0).replace("defaultdict(<class 'int'>, ", '')
rule7 = str(rule1).replace("defaultdict(<class 'int'>, ", '')
rule8 = str(rule2).replace("defaultdict(<class 'int'>, ", '')
rule9 = str(rule3).replace("defaultdict(<class 'int'>, ", '')
rule10 = str(rule4).replace("defaultdict(<class 'int'>, ", '')
rule11 = str(rule5).replace("defaultdict(<class 'int'>, ", '')
# MY_RULE[a] = values
MY_RULE[key1] = MY_RULE.get(key1, []) + [( rule7, rule8, rule9, rule10, rule11)]
del MY_RULE['[]']
# print(a)
# for i in values['violations']:
# print(i[''])
# print(rule0)
print(MY_RULE)
我打算计算每个文件的优先级数,但最后它会计算所有文件的所有优先级并根据标准数对它们进行相应的求和,最后结果是 {4: 3965, 2: 6572, 3: 1285, 1: 129, 5:65} 如何更改代码以便仅在一个文件的框架内考虑优先级
对于正确的收集报告,写完后重新设置就足够了