如何比较python中的两个文件并获得布尔值?

如何比较python中的两个文件并获得布尔值?,python,Python,我是python新手,我正在研究python文件操作,其中有两个输入文件 1.Security\u Headers\u list.txt 9508,content-security-policy 9496,content-security-policy 9240,content-security-policy 904,content-security-policy,x-content-type-options,strict-transport-security,x-frame-options 8

我是python新手,我正在研究python文件操作,其中有两个输入文件

1.Security\u Headers\u list.txt

9508,content-security-policy
9496,content-security-policy
9240,content-security-policy
904,content-security-policy,x-content-type-options,strict-transport-security,x-frame-options
8013,content-security-policy
5263,content-security-policy,x-frame-options
4378,content-security-policy
3854,content-security-policy
3331,content-security-policy
strict-transport-security
content-security-policy
x-frame-options
x-content-type-options
x-xss-protection
public-key-pins
2.Master.txt

9508,content-security-policy
9496,content-security-policy
9240,content-security-policy
904,content-security-policy,x-content-type-options,strict-transport-security,x-frame-options
8013,content-security-policy
5263,content-security-policy,x-frame-options
4378,content-security-policy
3854,content-security-policy
3331,content-security-policy
strict-transport-security
content-security-policy
x-frame-options
x-content-type-options
x-xss-protection
public-key-pins
必须将安全标题列表与主列表进行比较。

脚本:

    f_out=open('Output.txt', 'wb')
    f=open('master.txt','r')
    a=f.readlines()
    f1=open("Security_Headers_list.txt","r")
    b=f1.readlines()
    x=0
    str=""
    match =[]
    appno =""
    while x<len(a):
            h=a[x].strip()
            y=0
            z=0
            while y<len(b):
                    c=b[y].strip()
                    appno=b[0]
                    if (h==c):
                            z=1
                    y=y+1
            if z == 1:
                    str=str+"Yes,"
            else:
                    str=str+"No, "
            x=x+1
    match.insert(0,appno)
    f_out.write(b[0].rstrip() + "," + str[0:len(str)-2])
    f.close()
    f1.close()
    f_out.close()
9508,No,Yes,No,No,No,No
9496,No,Yes,No,No,No,No
9240,No,Yes,No,No,No,No
904,Yes,Yes,Yes,Yes,No,No
8013,No,Yes,No,No,No,No
5263,No,Yes,Yes,No,No,No
4378,No,Yes,No,No,No,No
3854,No,Yes,No,No,No,No
3331,No,Yes,No,No,No,No

我没有得到我想要的,请给我一些建议。

由于您有两个文件,因此需要从一个文件中提取数据,请创建该数据的列表,该列表表示类型
types=data1.read().split(“\n”)
。然后遍历第一个文件中的每一行,查看其中是否存在类型,并相应地替换
“Yes”
“No”

with open("Master.txt", "r") as data1, open("Security_Headers_list.txt", "r") as data2:
  types = data1.read().split("\n")
  for line in data2:
    out = ""
    split_line = line.strip().split(",")
    sno, categories = split_line[0], split_line[1:]
    out+=sno+"  "
    for typ in types:
      if typ in categories:
        out+="Yes, "
      else:
        out+="No, "
    print out[:-2]
输出:

9508  No, Yes, No, No, No, No
9496  No, Yes, No, No, No, No
9240  No, Yes, No, No, No, No
904  Yes, Yes, Yes, Yes, No, No
8013  No, Yes, No, No, No, No
5263  No, Yes, Yes, No, No, No
4378  No, Yes, No, No, No, No
3854  No, Yes, No, No, No, No
3331  No, Yes, No, No, No, No
编辑:

    f_out=open('Output.txt', 'wb')
    f=open('master.txt','r')
    a=f.readlines()
    f1=open("Security_Headers_list.txt","r")
    b=f1.readlines()
    x=0
    str=""
    match =[]
    appno =""
    while x<len(a):
            h=a[x].strip()
            y=0
            z=0
            while y<len(b):
                    c=b[y].strip()
                    appno=b[0]
                    if (h==c):
                            z=1
                    y=y+1
            if z == 1:
                    str=str+"Yes,"
            else:
                    str=str+"No, "
            x=x+1
    match.insert(0,appno)
    f_out.write(b[0].rstrip() + "," + str[0:len(str)-2])
    f.close()
    f1.close()
    f_out.close()
9508,No,Yes,No,No,No,No
9496,No,Yes,No,No,No,No
9240,No,Yes,No,No,No,No
904,Yes,Yes,Yes,Yes,No,No
8013,No,Yes,No,No,No,No
5263,No,Yes,Yes,No,No,No
4378,No,Yes,No,No,No,No
3854,No,Yes,No,No,No,No
3331,No,Yes,No,No,No,No
在注释和列表理解中@AntonyHatchkins的帮助下,上述代码可以简化为:

with open("TEKST_ny.txt", "r") as data1, open("sample.txt", "r") as data2:
  types = data1.read().split("\n")
  for line in data2:
    sno, categories = line.rstrip().split(',', 1)
    print "".join([sno+"  "]+["Yes, " if typ in categories else "No, " for typ in types ])[:-2]

您可以使用“filecmp”模块比较两个文件,它将返回boolen值,true或false。它有简单的语法。以下是帮助您解决问题的链接。

我建议使用与@ZdaR(+生成器表达式)稍有不同的连接:

请尝试以下代码:

f_out=open('Output.txt', 'wb')
f=open('master.txt','r')
a=f.readlines()
f1=open("Security_Headers_list.txt","r")
b=f1.readlines()
x=0
str=""
match =[]
for line in b:
    options = line.split(",")
    l = options[0]
    options1 =[]
    for opt in options:
        options1.append(opt.strip())
    for match in a:
        if match.strip() in options1:
            l = l + ",Yes"
        else:
            #print match.strip()
            l = l + ",No"
    f_out.write(l+"\n")
f.close()
f1.close()
f_out.close()

sno,categories=line.rstrip()!谢谢你,伙计!我得到以下输出:9508否否否否否9496否否否否否否否否否否9240否否否否904是是是是是否8013否否否否否否否否否否4378否否否否否否否否否3854否否否否否3331否否否否否否否否否否否否否否否否否否,是不确定每个num的最后一个“是”值!非常感谢你!太完美了!谢谢你,安东尼!我得到以下输出为9508否否否否否9496否否否否否否否否9240否否否否904是是是否8013否否否否5263否否否否否否否4378否否否否否否3854否,Yes,No,No,No,No,Yes 3331 No,Yes,No,No,No,No,Yes不确定每个num的最后一个“Yes”值!已修复(添加了rstrip()