Python 正在分析安全矩阵电子表格-非类型不可编辑

Python 正在分析安全矩阵电子表格-非类型不可编辑,python,python-2.7,xlrd,Python,Python 2.7,Xlrd,尝试将“否”和“是”嵌套到各自的应用程序和服务中。 这样,当针对特定区域到区域序列的请求传入时,可以根据此逻辑运行检查以验证已接受的请求 我尝试调用Decision\u List[区域名称][是\u否]。更新并尝试在它是列表类型而不是dict但没有更新方法时追加 Base_Sheet = range(5, sh.ncols) Column_Rows = range(1, sh.nrows) for colnum in Base_Sheet: Zone_Name = sh.col_valu

尝试将“否”和“是”嵌套到各自的应用程序和服务中。 这样,当针对特定区域到区域序列的请求传入时,可以根据此逻辑运行检查以验证已接受的请求

我尝试调用Decision\u List[区域名称][是\u否]。更新并尝试在它是列表类型而不是dict但没有更新方法时追加

Base_Sheet = range(5, sh.ncols)
Column_Rows = range(1, sh.nrows)

for colnum in Base_Sheet:
   Zone_Name = sh.col_values(colnum)[0]
   Zone_App_Header = {sh.col_values(4)[0]:{}}
   Zone_Svc_Header = {sh.col_values(3)[0]:{}}
   Zone_Proto_Header = {sh.col_values(2)[0]:{}}
 Zone_DestPort_Header = {sh.col_values(1)[0]: {}}
 Zone_SrcPort_Header = {sh.col_values(0)[0]: {}}


Decision_List = {Zone_Name:{}}


for rows in Column_Rows:
    app_object   = sh.col_values(4)[rows]
    svc_object   = sh.col_values(3)[rows]
    proto_object = sh.col_values(3)[rows]
    dst_object   = sh.col_values(2)[rows]
    src_object   = sh.col_values(1)[rows]
    yes_no       = sh.col_values(colnum)[rows]

    if yes_no not in Decision_List[Zone_Name]:
        Decision_List[Zone_Name][yes_no] = [app_object]
    else:
        Decision_List[Zone_Name]=[yes_no].append(app_object)
我想它目前的信息如下

Decision_List{Zone_Name:{yes:[ssh, ssl, soap], no: 
                 [web-browsing,facebook]}}

我仍然想知道为什么我不能对值为列表的特定yes\u no键调用append方法

但同时,我也做了一些工作。我创建了一个集合作为键,并将yes_no作为值。这将允许我将许多非类型值和作为一组应用程序、端口、服务等的键配对。。然后我可以搜索yes值,并从中创建额外的dict用于逻辑

有没有更好的主意我洗耳恭听

for rownum in range(0, sh.nrows):
    #row_val is all the values in the row of cell.index[rownum]  as determined by rownum
    row_val = sh.row_values(rownum)
    col_val = sh.col_values(rownum)
    print rownum, col_val[0], col_val[1: CoR]
    header.append({col_val[0]: col_val[1: CoR]})
print header[0]['Start Port']

dec_tree = {}
count = 1
Base_Sheet = range(5, sh.ncols)
Column_Rows = range(1, sh.nrows)

for colnum in Base_Sheet:
    Zone_Name = sh.col_values(colnum)[0]
    Zone_App_Header = {sh.col_values(4)[0]:{}}
    Zone_Svc_Header = {sh.col_values(3)[0]:{}}
    Zone_Proto_Header = {sh.col_values(2)[0]:{}}
    Zone_DestPort_Header = {sh.col_values(1)[0]: {}}
    Zone_SrcPort_Header = {sh.col_values(0)[0]: {}}


    Decision_List = {Zone_Name:{}}


    for rows in Column_Rows:
        app_object   = sh.col_values(4)[rows]
        svc_object   = sh.col_values(3)[rows]
        proto_object = sh.col_values(3)[rows]
        dst_object   = sh.col_values(2)[rows]
        src_object   = sh.col_values(1)[rows]
        yes_no       = sh.col_values(colnum)[rows]



        for rule_name in Decision_List.iterkeys():
            Decision_List[Zone_Name][(app_object, svc_object, proto_object)]= yes_no

再次感谢。

我仍然想知道为什么我不能对特定的yes\u no键调用append方法,该键的值是一个列表

但同时,我也做了一些工作。我创建了一个集合作为键,并将yes_no作为值。这将允许我将许多非类型值和作为一组应用程序、端口、服务等的键配对。。然后我可以搜索yes值,并从中创建额外的dict用于逻辑

有没有更好的主意我洗耳恭听

for rownum in range(0, sh.nrows):
    #row_val is all the values in the row of cell.index[rownum]  as determined by rownum
    row_val = sh.row_values(rownum)
    col_val = sh.col_values(rownum)
    print rownum, col_val[0], col_val[1: CoR]
    header.append({col_val[0]: col_val[1: CoR]})
print header[0]['Start Port']

dec_tree = {}
count = 1
Base_Sheet = range(5, sh.ncols)
Column_Rows = range(1, sh.nrows)

for colnum in Base_Sheet:
    Zone_Name = sh.col_values(colnum)[0]
    Zone_App_Header = {sh.col_values(4)[0]:{}}
    Zone_Svc_Header = {sh.col_values(3)[0]:{}}
    Zone_Proto_Header = {sh.col_values(2)[0]:{}}
    Zone_DestPort_Header = {sh.col_values(1)[0]: {}}
    Zone_SrcPort_Header = {sh.col_values(0)[0]: {}}


    Decision_List = {Zone_Name:{}}


    for rows in Column_Rows:
        app_object   = sh.col_values(4)[rows]
        svc_object   = sh.col_values(3)[rows]
        proto_object = sh.col_values(3)[rows]
        dst_object   = sh.col_values(2)[rows]
        src_object   = sh.col_values(1)[rows]
        yes_no       = sh.col_values(colnum)[rows]



        for rule_name in Decision_List.iterkeys():
            Decision_List[Zone_Name][(app_object, svc_object, proto_object)]= yes_no

再次感谢。

我认为更好的方法是使用collections.defaultdict

以这种方式,它将确保我能够按照我最初的意图附加到特定的yes_no

for colnum in Base_Sheet:
    Zone_Name = sh.col_values(colnum)[0]
    Zone_App_Header = {sh.col_values(4)[0]:{}}
    Zone_Svc_Header = {sh.col_values(3)[0]:{}}
    Zone_Proto_Header = {sh.col_values(2)[0]:{}}
    Zone_DestPort_Header = {sh.col_values(1)[0]: {}}
    Zone_SrcPort_Header = {sh.col_values(0)[0]: {}}


    Decision_List = {Zone_Name:defaultdict(list)}


    for rows in Column_Rows:
        app_object   = sh.col_values(4)[rows]
        svc_object   = sh.col_values(3)[rows]
        proto_object = sh.col_values(2)[rows]
        dst_object   = sh.col_values(1)[rows]
        src_object   = sh.col_values(0)[rows]
        yes_no       = sh.col_values(colnum)[rows]

        if yes_no not in Decision_List[Zone_Name]:
            Decision_List[Zone_Name][yes_no]= [app_object, svc_object, proto_object, dst_object, src_object]
        else:
            Decision_List[Zone_Name][yes_no].append([(app_object, svc_object, proto_object,dst_object, src_object)])

这使我可以将值设置为一个集合,并根据需要附加它们

我认为更好的方法是使用collections.defaultdict

以这种方式,它将确保我能够按照我最初的意图附加到特定的yes_no

for colnum in Base_Sheet:
    Zone_Name = sh.col_values(colnum)[0]
    Zone_App_Header = {sh.col_values(4)[0]:{}}
    Zone_Svc_Header = {sh.col_values(3)[0]:{}}
    Zone_Proto_Header = {sh.col_values(2)[0]:{}}
    Zone_DestPort_Header = {sh.col_values(1)[0]: {}}
    Zone_SrcPort_Header = {sh.col_values(0)[0]: {}}


    Decision_List = {Zone_Name:defaultdict(list)}


    for rows in Column_Rows:
        app_object   = sh.col_values(4)[rows]
        svc_object   = sh.col_values(3)[rows]
        proto_object = sh.col_values(2)[rows]
        dst_object   = sh.col_values(1)[rows]
        src_object   = sh.col_values(0)[rows]
        yes_no       = sh.col_values(colnum)[rows]

        if yes_no not in Decision_List[Zone_Name]:
            Decision_List[Zone_Name][yes_no]= [app_object, svc_object, proto_object, dst_object, src_object]
        else:
            Decision_List[Zone_Name][yes_no].append([(app_object, svc_object, proto_object,dst_object, src_object)])
这允许我将这些值设置为一个集合,并根据需要附加它们