Как правильно сопоставить строку внутри CSV-файла с лог-файлом? - PullRequest
0 голосов
/ 02 октября 2018

Дано:

У меня есть эти строки внутри моего sha1_vsdt.csv и trendx.log файла

Это мои сэмплы внутри моего csv-файла

--------------------SHA-1---------------|-----VSDT-----
3ecca1d4af42561676de09019ddc94a52b49efcc|MS Office 1-0,
3f99507159f62331af7dedafeaac9da47fd9338b|MS Office 1-0,
3fdd26300c7f86c1a24dd8b13e99d5d7abea0604|WIN32 EXE 7-2,
4016bf58ee14e73cc42d8de918c6547c6b3b8f42|MS Office 1-0,
0e13d281af08954102e7caf95864ef553c7277bd|WIN32 EXE 7-2,

И сэмплы внутри моего файла trendx.log:

1537762040  0   1   1   1537733240  1537733240  1537733240  8224    98  88064   0e13d281af08954102e7caf95864ef553c7277bd    Troj.Win32.TRX.XXPE50FFF026 c:\users\administrator\desktop\downloader\download\     Troj.Win32.TRX.XXPE50FFF026    Administrator           0e13d281af08954102e7caf95864ef553c7277bd        ACIKwAgACIAIAQAAMQAAAAAAAABAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=

Задание:

Моя задача состоит в том, чтобы сопоставить строки SHA-1 в моем столбце SHA-1 и найти его совпадение в моем файле trendx.log, и когда оно совпадет, оно должно получить описание, а затем поместить его в третий столбец следующим образом:

--------------------SHA-1---------------|-----VSDT-----|-------MATCH--------
3ecca1d4af42561676de09019ddc94a52b49efcc|MS Office 1-0,|undetected
3f99507159f62331af7dedafeaac9da47fd9338b|MS Office 1-0,|undetected
3fdd26300c7f86c1a24dd8b13e99d5d7abea0604|WIN32 EXE 7-2,|undetected
4016bf58ee14e73cc42d8de918c6547c6b3b8f42|MS Office 1-0,|undetected
0e13d281af08954102e7caf95864ef553c7277bd|WIN32 EXE 7-2,|TRENDX  172.20.4.179

Если совпадение не найдено, его следует поместить необнаруженным в третий столбец.У меня нет идеи сделать это, я очень плохо знаком с Python, любые идеи будут очень полезны для меня.

Вот мое полное содержимое csv и файла журнала:

sha1_vsdt.csv

trendx.log

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

@ jeremydevera, вот более упрощенная версия.Я использовал pandas dataframe для загрузки файлов csv и log.Затем используйте слияние для сравнения, если есть совпадение.

import numpy as np
import pandas as pd
import csv

#Log data into dataframe using genfromtxt
logdata = np.genfromtxt("trendx.log", delimiter="   ",invalid_raise = False,dtype=str, comments=None,usecols=np.arange(0,24))
logframe = pd.DataFrame(logdata)
#Dataframe trimmed to use only SHA1, PRG and IP
df2=(logframe[[10,14,15]]).rename(columns={10:'SHA1', 14: 'PRG',15:'IP'})


#sha1_vsdt data into dataframe using read_csv
df1=pd.read_csv("sha1_vsdt.csv",delimiter=r"|",error_bad_lines=False,engine = 'python',quoting=3)
#Using merge to compare the two CSV
df = pd.merge(df1, df2, left_on='--------------------SHA-1---------------', right_on='SHA1', how='left').replace(np.nan, 'undetected', regex=True)
print df[['--------------------SHA-1---------------','-----VSDT-----','PRG','IP']]
0 голосов
/ 02 октября 2018

@ jeremydevera, это должно помочь вам.Вам нужен цикл, чтобы пройти через файл sha1_vsdt.csv, а затем соответствующий раздел (при сопоставлении со строкой в ​​журнале trendx используйте значение).

См. Макет ниже:

import csv
import re
trendx='1537762040  0   1   1   1537733240  1537733240  1537733240  8224    98  88064   0e13d281af08954102e7caf95864ef553c7277bd    Troj.Win32.TRX.XXPE50FFF026 c:\users\administrator\desktop\downloader\download\     Troj.Win32.TRX.XXPE50FFF026    Administrator           0e13d281af08954102e7caf95864ef553c7277bd        ACIKwAgACIAIAQAAMQAAAAAAAABAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA='
textsearch=re.findall(r'\S+', trendx)

with open('sha1_vsdt.csv', 'rt') as f:
    reader = csv.reader(f, delimiter='|')
    for row in reader:
        matched='undetected'
        if row[0]  == textsearch[10]:
            matched=textsearch[11]
        print [row[0],row[1],matched]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...