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



我正在尝试将测试框架与日志文件关联起来,以确定哪些实例通过,哪些实例失败。为了更好地解释,这里有一个例子:我有一个清单:

data = ['F','P'] # first test pass, second test fail 

这是我的日志文件:

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"直到下一个clear与p关联,我使用html构建代码,每当p出现时,它都将是绿色的每次F出现时,带有红色的代码

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

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>'

我真的不确定这个结构。如何找到每次"清除"发生的时间,并为其指定特定的颜色,直到下一个实例发生。请随时向我提问或进一步澄清!非常感谢!

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

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+WclearW)|(?=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)

此打印:

('<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如何工作的在线示例。

快速而肮脏的方法是一次读取所有文本并在USER INPUT : "clear"上拆分。

# 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)

相关内容

最新更新