Python: في كل مرة يحدث فيها "مسح" ، أريد أن يقترن النص بقائمة

2

أحاول ربط إطار الاختبار الخاص بي بملف السجل الخاص بي لمعرفة أي الحالات تمر وأي منها تفشل. للتوضيح بشكل أفضل ، إليك مثال: لدي قائمة:

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" الأول حتى يتضح أن الأمر التالي يرتبط بـ 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>'

أنا حقا غير متأكد من الهيكل. كيف تجد في كل مرة يحدث "واضح" وتعيين لون معين حتى يحدث المثال التالي. لا تتردد في طرح أي أسئلة حول هذا الأمر أو لمزيد من التوضيح! شكرا للطن!

2 الاجابة

3
افضل جواب

يمكنك استخدام 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+\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)

يطبع:

('<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 هنا .

:مؤلف
1
افضل جواب

الطريقة السريعة والقذرة هي قراءة كل النص دفعة واحدة والانقسام 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)
:مؤلف
فوق
قائمة طعام