python - 如何解析文件并用其内容填充 python 字典

标签 python regex parsing iterable dictionary-comprehension

所以我有以下文件摘要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/

相关文章:

python - 按键分组并使用自定义标准聚合

ios - 检查 Swift 中两个字符串表达式之间的相似性

ios - 如何在 IOS Swift 中将 JSON 响应传递给我的 ArrayList

parsing - 左递归解析

java - 解析 XML 不会显示所有项目

python - 弹出字典中第一个插入的键值对 [Python 3.7+]

jquery - 有关 django-chunked-upload 和 jQuery-File-Upload 上传大文件的任何建议

python - Notepad++ 折叠级别与 Python 代码

Python,正则表达式-如何匹配第二组,仅当第一组匹配时

javascript - 正则表达式匹配未注释的行