Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将csv文件中的字符串与日志文件匹配的正确方法是什么?_Python_Excel_Csv_Logging - Fatal编程技术网

Python 将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

给定:

我的文件中有这个字符串

这是我的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和日志文件的全部内容:


@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。查看该文件,看看它是否需要清理,或者源文件是否存在一些问题。