给出:
我的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和日志文件的全部内容:
答案 0 :(得分:0)
@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]
答案 1 :(得分:0)
@jeremydevera,这是一个更简化的版本。我已使用pandas dataframe加载csv和日志文件。然后使用合并比较是否存在匹配项。
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']]