【发布时间】:2021-07-27 21:30:16
【问题描述】:
所以我有以下文件摘要1:
---
Project: pgm1
Last-Status: success
summary: 102 passed, 88 warnings in 26.11s
---
Project: pgm2
Last-Status: failed
summary: 1 failed, 316 passed, 204 warnings in 2919.10s
---
Project: pgm3
Last-Status: success
summary: 400 passed, 40 skipped, 1 xfailed in 3.17s
---
我需要解析它的内容,然后在一个循环中,使用预定义的值创建一个字典,然后使用文件中的解析值填充相应的字典键,结果如下:
entry = {
"{#STATUS}": 0
"{#DESCRIPTION}": "pgm2",
"{#PASSED}": 316,
"{#FAILED}": 1,
"{#WARNING}": 204,
"{#SKIPPED}": 0,
"{#XFAILED}": 0,
"{#DURATION}": 2919.10
}...
对于文件中的所有数据部分,依此类推。 但是,我无法获取并打印字段“{#DURATION}”的正确值。相反,这就是我得到的:
{
"{#PASSED}": "316",
"{#FAILED}": "1",
"{#DURATION}": "10",
"{#XFAILED}": 0,
"{#SKIPPED}": 0,
"{#STATUS}": 0,
"{#DESCRIPTION}": "pmg2",
"{#WARNING}": 204
}
这是我的代码:
def break_text(lst_text):
desc = re.findall(r": (.*)", lst_text[1])
status = re.findall(r": (.*)", lst_text[2])
summary = re.findall(r"\d+ \w+", lst_text[3])
return desc, status, summary
def create_dict(lst):
desc = ' '.join([str(elem) for elem in lst[0]])
status = ' '.join([str(elem) for elem in lst[1]])
if status == "success":
status = 1
else:
status = 0
entry = {
"{#STATUS}": status,
"{#DESCRIPTION}": desc,
"{#PASSED}": 0,
"{#FAILED}": 0,
"{#WARNING}": 0,
"{#SKIPPED}": 0,
"{#XFAILED}": 0,
"{#DURATION}": 0,
}
dict_temp = {
"passed": "{#PASSED}",
"failed": "{#FAILED}",
"warnings": "{#WARNING}",
"skipped": "{#SKIPPED}",
"xfailed": "{#XFAILED}",
"seconds": "{#DURATION}",
}
for i in lst[2]:
v, k = i.split()
entry[dict_temp[k]] = v
return entry
with open("/tmp/summary1", "r") as file:
file = file.read().splitlines()
data_list = []
for i in range(0, len(file), 4): # Read 4 lines of the file each time
text = file[i: i + 4]
if len(text) <= 1:
continue
res_tmp = break_text(text)
res = create_dict(res_tmp)
data_list.append(res)
new_dict = dict()
new_dict["data"] = data_list
print(new_dict)
关于如何获取字段“{#DURATION}”的正确值以及我的代码有什么问题的任何建议?
【问题讨论】:
标签: python json file dictionary parsing