Python检查附加到第四的三个列表

  • 本文关键字:列表 三个 Python python
  • 更新时间 :
  • 英文 :


我有4个列表:

"评论家"

[ade4c7059e17ab9e47d2aaec6cf04a9d, 882edee4cc71806190ca43993e8b2eb5, nekspzwjxhqroiu.com, htfbzqewll.org]`

"主"

[4d7d1c89529bcfcbbbbf9d6a2ba42cb5, 9f26da4de1653f609e7b4bcaade63daa]

然后每个功能都有MD5的单独列表 - [ex。49F12A7B358C7F7CBA005610210418AA]" MD5-ThreatExpert"one_answers" MD5-杂交分析",这两个功能都将我重命名为" MD5 Threat"。

,然后在每个功能中,我都在尝试将"批评者"one_answers"掌握"与" md5 threat"进行比较。

" MD5 threat"中的任何内容都不在"批评者"或"主"中添加到" md5brounput"中。
和如果已将其添加到" MD5Broutput"中,则还附加回" Master"。

" md5broutput"是每天都是新的,我每周都会擦拭"主"。

def md5threatexpertcritical():
    filename = open("md5-ThreatExpert-bro", 'w')   #input file for bro script gone through critical checks
    md5threat = "md5-ThreatExpert"  #latest md5's from MISP
    #create bromaster if doesn't exist
    if os.path.exists("bromasterlist"):
        pass
    else:
        f = file("bromasterlist", "w")
        f.close()
    master        = "bromasterlist"  #master bro list that we've already added to bro
    PATH          = "/opt/critical-stack/frameworks/intel"
    CRITICAL      = "master-public.bro.dat" 
    CRITICALSTACK = os.path.join(PATH, CRITICAL)
    criticallist  = "/home/money/Documents/hybrid/critical" 
    whitelist     = open(criticallist,'w')
    with open(CRITICALSTACK,'r') as CRITICALSTACK1:
        reader   = csv.reader(CRITICALSTACK1, delimiter='t')
        CRITICAL = []
        for row in reader:
            CRITICAL.append(row[0])
    whitelist.write("n".join(CRITICAL))  

    x=[]
    y=[]
    z=[]
    md5broinput=[]
    with open(criticallist, 'r') as critical:
        for line in critical:
            line = line.strip()
            x.append(line)  
        with open(master, 'r') as bromaster:
            for line in bromaster:
                line = line.strip()
                y.append(line)
            with open(md5threat, 'r') as md5threat:
                for line in md5threat:
                    line = line.strip()
                    z.append(line)
                for md5 in z:
                    if md5 in y:
                        print md5+" is in bromaster"
                        pass
                    elif md5 in x:
                        print md5+" is in critical"
                        pass
                    elif md5 not in x and y:                        
                        y.append(md5)
                        md5broinput.append(md5)
    filename.write("n".join(md5broinput))
    filename.close()
    f=open(master,'a')
    f.write("n".join(set(y)))
    f.write("n")
    f.close()
def md5hybridanalysiscritical():
    filename      = open("md5-HybridAnalysis-bro", 'w+')   
    md5threat     = "md5-HybridAnalysis"  #latest md5's from MISP
    master        = "bromasterlist"  #master bro list that we've already added to bro
    PATH          = "/opt/critical-stack/frameworks/intel"
    CRITICAL      = "master-public.bro.dat" 
    CRITICALSTACK = os.path.join(PATH, CRITICAL)
    criticallist  = "/home/money/Documents/hybrid/critical" 
    x=[]
    y=[]
    z=[]
    md5broinput=[]
    with open(criticallist, 'r') as critical:
        for line in critical:
            line = line.strip()
            x.append(line)  
        with open(master, 'r') as bromaster:
            for line in bromaster:
                line = line.strip()
                y.append(line)
            with open(md5threat, 'r') as md5threat:
                for line in md5threat:
                    line = line.strip()
                    z.append(line)
                for md5 in z:
                    if md5 in y:
                        print md5+" is in bromaster"
                        pass
                    elif md5 in x:
                        print md5+" is in critical"
                        pass
                    elif md5 not in x and y:                        
                        y.append(md5)
                        md5broinput.append(md5)
    filename.write("n".join(md5broinput))
    filename.close()
    f=open(master,'a')
    f.write("n".join(set(y)))
    f.write("n")
    f.close()

尝试作为代码的重构。当list comprehension更具Pythonic时,代码将"with"用作上下文。添加@nbryans答案..

https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions

filename  = open("md5-HybridAnalysis-bro", 'wb+') 
md5threat = open("md5-HybridAnalysis" , 'rb')  #
x = [line.strip() for line in  criticallist ]
y = [line.strip() for line in  master]
z = [line.strip() for line in  md5threat]
md5broinput = []
#print x[:6]
#print y[:6]
#print z[:6]
for md5 in z:
    if md5 in y:
        print md5+" is in bromaster"
    elif md5 in x:
        print md5+" is in critical"
    else:                       
        y.append(md5)
        md5broinput.append(md5)

filename.write("n".join(md5broinput))
filename.close()
f=open(master,'a')
f.write("n".join(y))
f.write("n")
f.close()

如果我正确理解这个问题,您想要

for md5 in z:
    if md5 in y:
        print md5+" is in bromaster"
        pass

正如现在所写的那样,您在检查if md5 not in yy as Master。

因此,当MD5不在y中时,代码说的是,如果但没有附加的其他。

当前代码:

        for md5 in z:
            if md5 not in y:
                print md5+" is in bromaster"
                pass
            elif md5 in x:
                print md5+" is in critical"
                pass
            else:                       
                y.append(md5)
                md5broinput.append(md5)

我认为代码应该说:

        for md5 in z:
            if md5 in y:                 #<--- This is the line changed
                print md5+" is in bromaster"
                pass
            elif md5 in x:
                print md5+" is in critical"
                pass
            else:                       
                y.append(md5)
                md5broinput.append(md5)

我建议清理代码,以免在您想相互比较的许多信息中丢失。一种方法是不要将批评家的内容命名为x(当检索为列表时)等待一秒钟...

这呢:

#! /usr/bin/env python
from __future__ import print_function
md5threat = "md5-HybridAnalysis"
criticallist = "some_criticallist.txt"
master = "some_master.txt"
x_crit, y_mast, z_md5t = [], [], []
md5broinput = []
with open(criticallist, 'r') as critical:
    for line in critical:
        x_crit.append(line.strip())
    with open(master, 'r') as bromaster:
        for line in bromaster:
            y_mast.append(line.strip())
        with open(md5threat, 'r') as md5threat:
            for line in md5threat:
                z_md5t.append(line.strip())
            for a_md5 in z_md5t:
                if a_md5 in y_mast:
                    print(a_md5 + " is in bromaster")
                    pass
                elif a_md5 in x_crit:
                    print(a_md5 + " is in critical")
                    pass
                else:
                    y_mast.append(a_md5)
                    md5broinput.append(a_md5)
with open("md5-HybridAnalysis-bro", 'w+') as o_f:
    o_f.write("n".join(md5broinput))
with open(master, 'a') as m_f:
    m_f.write("n".join(y_mast) + 'n')

,然后是@nbryans已经发现了变化:

            for a_md5 in z_md5t:
                if a_md5 not in y_mast:
                    print(a_md5 + " is in bromaster")
                    pass

to:

            for a_md5 in z_md5t:
                if a_md5 in y_mast:
                    print(a_md5 + " is in bromaster")
                    pass

我更喜欢@merlins回答。如果您想进一步使用上下文经理,同时构建完整列表,那么为什么不先从文件加载,一个接一个地将块留下来,而不是执行分析性匹配循环 - 以具有串行收集阶段和一个聚焦组合Algortihm仅与列表。

感谢@Merlin为您提供了非常感谢,我正在以理解为重新加工。我给你点了,应该只是为此!

如果您查看我犯了错误的位置,我正在检查列表y,然后在循环中的末端附加到它,所以这就像一个永无止境的循环 -

我替换 -

            for md5 in z:
                if md5 in y:
                    print md5+" is in bromaster"
                    pass
                elif md5 in x:
                    print md5+" is in critical"
                    pass
                elif md5 not in x and y:                        
                    y.append(md5)  #I got rid of this line and it works great. 
                    md5broinput.append(md5)

与 -

            for md5 in z:
                if md5 in y:
                    print md5+" is in bromaster"
                    pass
                elif md5 in x:
                    print md5+" is in critical"
                    pass
                elif md5 not in x and y:                        
                    md5broinput.append(md5)

我很感激我希望在某个时候我在这里帮助新秀!

相关内容

最新更新