Python 将csv文件中的字符串与日志文件匹配的正确方法是什么?
给定: 我的文件中有这个字符串 这是我的csv文件中的示例Python 将csv文件中的字符串与日志文件匹配的正确方法是什么?,python,excel,csv,logging,Python,Excel,Csv,Logging,给定: 我的文件中有这个字符串 这是我的csv文件中的示例 --------------------SHA-1---------------|-----VSDT----- 3ecca1d4af42561676de09019ddc94a52b49efcc|MS Office 1-0, 3f99507159f62331af7dedafeaac9da47fd9338b|MS Office 1-0, 3fdd26300c7f86c1a24dd8b13e99d5d7abea0604|WIN32 EXE 7
--------------------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和日志文件的全部内容:
@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]
@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']]
请展示您在这个问题上的研究成果。大概你已经把这两个文件读入某种结构了吧?我找不到任何关于将匹配字符串读入日志文件的研究,所以这里我想开始我的程序,这是你问题的一个具体细节。您真正想要做的是将csv文件读入列表,然后将文本文件读入列表。遍历列表,使用
=
在特定列表索引处查找字符串匹配项,并将结果附加到另一个列表中。一旦你做到了这一点,你就可以想办法让字典更有效。关键是,不太可能有一个预先制定的解决方案适合您的具体问题,您只需要将各个步骤分解,并且有大量关于如何阅读CSVS的内容和示例。我了解您的概念,但我不知道如何开始我看到您最终解决了实际问题。也许这个问题现在应该标记为重复的,或者干脆删除。列表索引超出范围检查您的文本搜索。这个错误似乎是说textsearch[10]的拆分可能没有那么多的条目..format(mask=objarr[mask])keyror:“[10 14 15]不在索引中”,我从第#1-行#113(得到了1列而不是24列)@jeremydevera中得到了这个结果,所有这些都来自导入的“trendx.log”。它似乎不是很适合导入到数据帧中。它的意思是,在该文件中有一行,导入只找到1列。通常它需要24列。这也会在key中抛出错误,因为没有第10、14、15列可以在其中找到该行上的SHA1、PRG和IP。查看该文件,看看它是否需要清理,或者源文件是否存在一些问题。