所以我有以下文件摘要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 42.94s
---
Project: pgm3
Last-Status: success
summary: 400 passed, 40 skipped, 1 xfailed in 3.17s
---
我需要解析它的内容,然后在循环中创建一个具有预定义值的字典:
entry = dict()
entry = {
"{#STATUS}": 0,
"{#PASSED}": 0,
"{#FAILED}": 0,
"{#WARNING}": 0,
"{#SKIPPED}": 0,
"{#XFAILED}": 0
}
然后使用文件中解析的值填充相应的字典键,结果如下:
entry = {
"{#STATUS}": 1
"{#DESCRIPTION}": "kytos/mef_eline",
"{#PASSED}": 316,
"{#FAILED}": 1,
"{#WARNING}": 0,
"{#SKIPPED}": 0,
"{#XFAILED}": 0,
}... And so on for all 3 Project-Desc data sections in the file
但是我无法弄清楚如何解析文件和分配变量,通过我的搜索,我发现正则表达式将是一个很好的工具,但我从未使用过它之前。
最佳答案
您可以从文件中的每个条目中解析出各种报告值,并使用结果形成单独的字典:
import re, itertools as it
hds = {'passed': '{#PASSED}', 'failed': '{#FAILED}', 'warnings': '{#WARNING}', 'skipped': '{#SKIPPED}', 'xfailed': '{#XFAILED}'}
with open('your_file.txt') as f:
contents = [i.strip('\n') for i in f]
d = [list(b) for a, b in it.groupby(contents, key=lambda x:x == '---') if not a]
def get_dict(entry):
_, [d, s, ps] = zip(*[i.split(': ') for i in entry])
d1 = {i.split()[-1]:i.split()[0] for i in re.findall('\d+\s[a-z]+', ps)}
return {"{#STATUS}":s, "{#DESCRIPTION}":d, **({b:d1.get(a, 0) for a, b in hds.items()})}
result = [get_dict(i) for i in d]
输出
[{'{#STATUS}': 'success', '{#DESCRIPTION}': 'kytos/mef_eline', '{#PASSED}': '102', '{#FAILED}': 0, '{#WARNING}': '88', '{#SKIPPED}': 0, '{#XFAILED}': 0}, {'{#STATUS}': 'failed', '{#DESCRIPTION}': 'kytos/kytos', '{#PASSED}': '316', '{#FAILED}': '1', '{#WARNING}': '204', '{#SKIPPED}': 0, '{#XFAILED}': 0}, {'{#STATUS}': 'success', '{#DESCRIPTION}': 'kytos/python-openflow', '{#PASSED}': '400', '{#FAILED}': 0, '{#WARNING}': 0, '{#SKIPPED}': '40', '{#XFAILED}': '1'}]
关于python - 如何解析文件并用其内容填充 python 字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67301417/