Я работаю над данными журнала событий, так как мы все знаем их неструктурированные данные и должны извлечь важные фрагменты информации из этих журналов для лучшей визуализации. Эти данные разделены табуляцией, я создал фрейм данных из этих журналов событий, а также ожидаемый вывод. Имя столбца Event_message
- это необработанное сообщение журнала событий, а столбцы CtrJb_ID
, Prcs_ID
, LotID
, Wafer_ID
- это столбцы, которые я хотел бы извлечь из этих журналов. Если условие не выполняется, то я бы хотел, чтобы строка была None или была пустой. Например, в одном случае, если идентификатор лота существует, извлеките идентификатор лота, а если нет, то нет.
data = {'Timestamp':['2009/8/22 08:02:29.862', '2009/8/22 08:02:30.706','2008/08/22 08:02:33.207','2008/08/22 08:02:37.551'],
'Event_Message':["2009/8/22 08:02:29.862 2009/8/22 08:02:29.862 123456 ControlJobStateTransition1 CWControlJobManager 'ControlJob named XYZ12345-20090822-0005 was created and is in the QUEUED state.' [] ['EventVariable ControlJobID 0 true XYZ12345-20090822-0005'' ControlJobID' 'EventVariable DataCollectionPlan 0 true ",
"2009/8/22 08:02:30.706 2009/8/22 08:02:30.315 123456 PRJobStateChange XYZ12ProcessJobManager 'Process Job 200908221102-2R34567.000-01 has changed state to PRJOBACTIVE/SETUP.' [] ['EventVariable ProcessJobID 0 true ''200908221102-2R34567.000-01'' ProcessJobID' 'EventVariable ProcessJobState 0 true ''1''",
"2008/08/22 08:02:33.207 2008/08/22 08:02:33.175 123456789 DAExtendPerResourceDAWaferCenterOffsetB TransferChamberSlotValvePM4 'DAPerResource EXTEND' [] ['StatusVariable Source 0 true ''TransferChamber-EndEffector2'' Source' 'StatusVariable Destination 0 true ''PM4'' Destination' 'StatusVariable WaferID 0 true ''1A234568ABC2'' WaferID' 'StatusVariable LotID 0 true ''200908221036-2R34567.000-01'' LotID'",
"2008/08/22 08:02:37.551 2008/08/22 08:02:37.404 12345678 RecipeStarted PM4 'Started processing recipe AB0-Z-65XYZ-ABCDE12XYZ1-2R34567000 on material 1A234568ABC2. ' [] ['StatusVariable RecipeName 0 true ''PM4-P-14LPP-PEBNS31JFA1-8R91721000'' RecipeName' 'StatusVariable MaterialID 0 true ''1A234568ABC2'' MaterialID' 'StatusVariable JobID 0 true ''201910021036-2R34567.000-01'' JobID' 'EventVariable WacID 0 true '''' WacID' 'StatusVariable LotID 0 true ''2R34567.000'' LotID' 'StatusVariable SlotID 0 true ''11"],
'CtrJb_ID': ['XYZ12345-20090822-0005', None, None, None],
'Prcs_ID': [None, '200908221102-2R34567.000', None, None],
'LotID': [None, None, '200908221036-2R34567.000-01', '2R34567.000'],
'Wafer_ID': [None, None, '1A234568ABC2', None ]}
df= pd.DataFrame(data)
Я прочитал это сообщение журнала событий построчно, а затем попытался извлечь его, используя шаблоны регулярных выражений, но безуспешно. Ниже приведен код, который я пробовал до сих пор.
import pandas as pd
import re
f = open ("C:\ABCD\XYZ\egfh_ijk_lmn\log2009082212.txt")
lines = f.readlines()
for line in lines:
print (line)
lot= re.compile(r'LotID\s+\d\s+\w+\s+(.*)\s+LotID')
for line in lines:
if lot.search(str(line)):
print(lot)
else:
print(None)
Выход:
None
None
None
None
None
re.compile('LotID\\s+\\d\\s+\\w+\\s+(.*)\\s+LotID')
re.compile('LotID\\s+\\d\\s+\\w+\\s+(.*)\\s+LotID')
None
None
None
None
None
re.compile('LotID\\s+\\d\\s+\\w+\\s+(.*)\\s+LotID')
None
None
re.compile('LotID\\s+\\d\\s+\\w+\\s+(.*)\\s+LotID')