将CSV文件中的字符串与日志文件匹配的正确方法是什么?

时间:2018-10-02 08:05:40

标签: python excel csv logging

给出:

我的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 :(得分: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']]