首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python:每次发生"clear“时,我都希望文本与一个列表相关联

Python:每次发生"clear“时,我都希望文本与一个列表相关联
EN

Stack Overflow用户
提问于 2018-07-31 02:29:20
回答 2查看 67关注 0票数 2

我正在尝试将我的测试框架与我的日志文件相关联,以找出哪些实例通过,哪些实例失败。为了更好地解释,这里有一个例子:我有一个列表:

代码语言:javascript
复制
data = ['F','P'] # first test pass, second test fail 

下面是我的日志文件:

代码语言:javascript
复制
USER INPUT :  “clear”                   ------
SYSTEM RESPONSE: “Hello! How are you?”        | Fail
USER INPUT : “Good thank you”                 |
SYSTEM RESPONSE: "Okay"                 ------ 
USER INPUT : “clear”                    ------
SYSTEM RESPONSE: “Hello! How are you?”        |
USER INPUT : “I am good, Thank you!”          | Pass
SYSTEM RESPONSE: "Great!"                     | 
USER INPUT : “Good”                     ------

因此," clear“的每个实例都会显示一个新的日志,因此,我希望第一个"clear”与P相关联,我使用html来构建代码,每当P出现时,它将是绿色的,而每当F出现时,代码将是红色的

到目前为止,我所拥有的是:

代码语言:javascript
复制
            for line in lines :
                for i in cc:
                    if (data[i]== 'P'):
                        n = """<p style="color:green;>""" + line + '</p>'
                    else:
                        n = """<p style="color:red;>""" + line + '</p>'

我对它的结构真的不太确定。如何在每次出现"clear“时查找,并为其分配特定的颜色,直到下一个实例出现。请随时问我任何关于这方面的问题或进一步澄清!非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-31 03:15:56

您可以根据USER INPUT : "clear"使用re来拆分日志文件

代码语言:javascript
复制
log_file = """USER INPUT :  “clear”
SYSTEM RESPONSE: “Hello! How are you?”
USER INPUT : “Good thank you”
SYSTEM RESPONSE: "Okay"
USER INPUT : “clear”
SYSTEM RESPONSE: “Hello! How are you?”
USER INPUT : “I am good, Thank you!”
SYSTEM RESPONSE: "Great!"
USER INPUT : “Good”"""

import re
from pprint import pprint

groups = re.findall(r'USER INPUT.*?clear.*?(?:(?=USER INPUT :\s+\Wclear\W)|(?=\Z))', log_file, flags=re.DOTALL)
data = ['F','P']

style = {'P': '<p style="color:green;>', 'F': '<p style="color:red;>'}

html = ''
for d, g in zip(data, groups):
    for line in g.splitlines():
        html += style[d] + line + '</p>\n'

pprint(html)

这将打印:

代码语言:javascript
复制
('<p style="color:red;>USER INPUT :  “clear”</p>\n'
 '<p style="color:red;>SYSTEM RESPONSE: “Hello! How are you?”</p>\n'
 '<p style="color:red;>USER INPUT : “Good thank you”</p>\n'
 '<p style="color:red;>SYSTEM RESPONSE: "Okay"</p>\n'
 '<p style="color:green;>USER INPUT : “clear”</p>\n'
 '<p style="color:green;>SYSTEM RESPONSE: “Hello! How are you?”</p>\n'
 '<p style="color:green;>USER INPUT : “I am good, Thank you!”</p>\n'
 '<p style="color:green;>SYSTEM RESPONSE: "Great!"</p>\n'
 '<p style="color:green;>USER INPUT : “Good”</p>\n')

编辑:

我在网上做了一个例子regex works here是如何。

票数 3
EN

Stack Overflow用户

发布于 2018-07-31 02:37:07

最快捷的方法是一次读取所有文本,然后在USER INPUT : "clear"上拆分。

代码语言:javascript
复制
# skip the first line since it's a clear, but not a separator
text = "\n".join(lines[1:])
split_on = 'USER INPUT :  "clear"                   ------\n'
blocks = text.split(split_on)
html_lines = []
for pf, block in zip(data, blocks):
    html_lines.append("<pre style='color:{};'>{}</pre>".format("green" if pf == "P" else "red", split_on + block))

with open("out.html", "w+") as outfile:
    outfile.writelines(html_lines)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51600182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档