Mój plik wejściowy.

INCIDENT 677700 password reset
INCIDENT 677742 C:\ drive full
INCIDENT 500901 mouse not working
INCIDENT 500942 unable to connect oracle box
INCIDENT 500949 high cpu utilization
INCIDENT 600901 sql server clustering failed
INCIDENT 490203 Low disk space issue
INCIDENT 10I891 Lotus Notes client failed
INCIDENT 489011 Low disk space issue
INCIDENT 89G901 SSIS Load failed

words =["password","drive full","disk space","SSIS","sql server","cpu utilization","oracle","Lotus Notes","mouse"]

Chciałbym przypisać kategorię w moim pliku wyjściowym, powinno być: i jak dodać przyszłe słowa.

Password,INCIDENT 677700 password reset
drive full,INCIDENT 677742 C:\ drive full
mouse,INCIDENT 500901 mouse not working
Oracle,500942 unable to connect oracle box
cpu utilization,INCIDENT 500949 high cpu utilization
sql server,INCIDENT 600901 sql server clustering failed
disk space, INCIDENT 490203 Low disk space issue
Lotus Notes,INCIDENT 10I891 Lotus Notes client failed
disk space,INCIDENT 489011 Low disk space issue
SSIS,INCIDENT 89G901 SSIS Load failed
-1
Gower 21 listopad 2018, 07:34

1 odpowiedź

Najlepsza odpowiedź

Po prostu iteruj w każdej linii i każde słowo, a jeśli słowo istnieje w wierszu, napisz nową linię word,line do pliku wyjściowego.

Niektóre założenia:

  • Chcesz zrobić bezustanny pasujący na e.g. Disk space i disk space pasują do.
  • Każdy wpis w pliku dziennika ma tylko jedno dopasowane słowo. Jeśli jest więcej, linia zostanie napisana dwukrotnie z każdym oddzielnym wejściem.

Demo:

words = [
    "password",
    "drive full",
    "disk space",
    "SSIS",
    "sql server",
    "cpu utilization",
    "oracle",
    "Lotus Notes",
    "mouse",
]

with open("input.txt") as file, open("output.txt", "w") as out:
    for line in file:
        for word in words:
            # Do lowercase matching
            if word.lower() in line.lower():
                out.write("%s,%s" % (word, line))

wyjście.txt:

password,INCIDENT 677700 password reset
drive full,INCIDENT 677742 C:\ drive full
mouse,INCIDENT 500901 mouse not working
oracle,INCIDENT 500942 unable to connect oracle box
cpu utilization,INCIDENT 500949 high cpu utilization
sql server,INCIDENT 600901 sql server clustering failed
disk space,INCIDENT 490203 Low disk space issue
Lotus Notes,INCIDENT 10I891 Lotus Notes client failed
disk space,INCIDENT 489011 Low disk space issue
SSIS,INCIDENT 89G901 SSIS Load failed

Możesz także skondensować dwie zagnieżdżone pętle za pomocą itertools.product():

from itertools import product

with open("input.txt") as file, open("output.txt", "w") as out:
    for line, word in product(file, words):
        if word.lower() in line.lower():
            out.write("%s,%s" % (word, line))
0
RoadRunner 21 listopad 2018, 08:06