【问题标题】:What is the correct way of matching a string inside a csv file to log file?将 csv 文件中的字符串与日志文件匹配的正确方法是什么?
【发布时间】:2019-03-07 08:12:08
【问题描述】:

鉴于:

我的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

【问题讨论】:

  • 请展示您从围绕这个问题的研究中实现的内容。大概您已经将这两个文件读入某种结构?
  • 我找不到任何关于匹配字符串到日志文件中的研究,所以在这里我有了一个开始我的程序的想法
  • 这是您问题的具体细节。您真正想要做的是将 csv 文件读入列表,然后将文本文件读入列表。遍历列表并使用== 在特定列表索引处查找字符串匹配项,并将结果附加到另一个列表。一旦你完成了这项工作,你就可以想办法让字典更有效率。关键是,不太可能存在适合您确切问题的预制解决方案,您只需要分解各个步骤,并且有大量关于如何阅读 CSV 的内容和示例
  • 我明白你的概念,但我不知道如何开始
  • 我看到你终于弄清楚了你的实际问题。也许这个问题现在应该被标记为stackoverflow.com/questions/52661863/… 的重复或干脆删除。

标签: python excel csv logging


【解决方案1】:

@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]

【讨论】:

  • 列表索引超出范围
  • 检查您的文本搜索。错误似乎是说 textsearch[10] 的拆分可能没有那么多条目。
【解决方案2】:

@jeremydevera,这是一个更简化的版本。我使用 pandas 数据框来加载 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']]

【讨论】:

  • .format(mask=objarr[mask])) KeyError: '[10 14 15] not in index'
  • 我从 Line#1 - Line #113 得到这个(得到 1 列而不是 24 列)
  • @jeremydevera,所有这些都来自导入“trendx.log”。导入数据框似乎不是很结构化。它的意思是该文件中有一行导入只找到 1 列。通常它需要 24 列。这也会引发 key 错误,因为没有第 10、14、15 列可以找到该行的 SHA1、PRG 和 IP。查看该文件,看看它是否需要清理或源有问题。
猜你喜欢
  • 1970-01-01
  • 2012-05-18
  • 1970-01-01
  • 2013-11-14
  • 1970-01-01
  • 2021-05-01
  • 1970-01-01
  • 2022-06-23
相关资源
最近更新 更多