Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.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:将列表中的字段与黑名单字段进行比较_Python_If Statement_List Comprehension - Fatal编程技术网

Python:将列表中的字段与黑名单字段进行比较

Python:将列表中的字段与黑名单字段进行比较,python,if-statement,list-comprehension,Python,If Statement,List Comprehension,我想将电子表格(CSV)中的行与良好值的列表[]进行比较,并创建不良行的黑名单(任何包含未出现在白名单中的值的行都会打印到文件中) 将所有内容与白名单中的项目匹配并将其写入文件 if any(item in row[4] for item not in lisst): print(rowEdit) writer.writerow(rowEdit) 似乎应该将文件中未列入白名单的部分打印给我,以便手动编辑添加到白名单中。没有 我正在排序的数据是一个包含资产数据的CSV文件。我想输

我想将电子表格(CSV)中的行与良好值的列表[]进行比较,并创建不良行的黑名单(任何包含未出现在白名单中的值的行都会打印到文件中)

将所有内容与白名单中的项目匹配并将其写入文件

if any(item in row[4] for item not in lisst):
    print(rowEdit)
    writer.writerow(rowEdit)
似乎应该将文件中未列入白名单的部分打印给我,以便手动编辑添加到白名单中。没有

我正在排序的数据是一个包含资产数据的CSV文件。我想输出按操作系统拆分,这是第[4]行列表项。
压痕有点乱

    import csv

def main():
choice = "chew"
filename=raw_input("enter the filename==>  ")
while choice != "swallow":

    os_choice = raw_input('Enter  "1" for Linux,\n       "2" for Windows\n       "3" for all others and\n       "4" to exit the script =>  ')

    qu = ""
    if os_choice == "1":
        qu = "nix"
    elif os_choice == "2":
        qu = "win"
    elif os_choice == "3":
        qu = "other"
    elif os_choice == "4":
        choice = "swallow"
        break
    else: continue
    #t=titleblock(filename)
    #L=labels(filename)
    c=content(filename, qu)

#   print(t,'\n',c,'\n',r,'\n')
return 0

def content(filename, qu):

with open(qu+'_content_'+filename, 'wb') as content:
    writer = csv.writer(content)
    with open(filename, 'rb') as mycsv:
        reader = csv.reader(mycsv)
        counter = 0

        for counter,row in enumerate(reader):
            if counter < 7: continue
#               if counter > ([-2:]) : break # This string-slicing technique doesn't work on lists made by csv module for some reason
            rowEdit = [row[0],row[22],row[2], row[4], row[6], row[15], row[16], row[11], row[18], row[19], row[20], row[25], row[26], row[27], row[28], row[29], row[30], row[31]]
            chklist=["OS", "Linux 2.4-2.6 / Embedded Device", "Linux 2.4-2.6", "Linux 2.6", "Red Hat Enterprise Linux ES 4", "Red Hat Enterprise Linux Server 5.8", "Linux*"]
            chklist2 = "Linux"
            wchklist=["OS", "Windows Server 2003 Service Pack 2", "Windows Server 2008 R2 Enterprise 64 bit Edition Service Pack 1","Windows"]
            ochklist=chklist+wchklist
            if qu == "nix":
                lisst = chklist
                if any(item in row[4] for item in lisst):
                    #print(rowEdit)
                    writer.writerow(rowEdit)
            elif qu == "win":
                lisst = wchklist
                if any(item in row[4] for item in lisst):
                    #print(rowEdit)
                    writer.writerow(rowEdit)
            elif qu == "other": 
                lisst = ochklist
                splisst = set(lisst)
                #if any(item not in row[4] for item in lisst):
                if splisst & row[4].split():
                    print(rowEdit)
                    writer.writerow(rowEdit)

谢谢你帮我度过难关

您将测试与循环混淆;将
not
移动到生成器表达式中测试表达式中的

if any(item not in row[4] for item in lisst):
项lisst的
部分在
lisst
元素上循环,生成器表达式的第一部分是实际测试

根据
行[4]
的结构,将白名单设置为一组可能更有效:

whitelist = set(lisst)

if whitelist.intersection(row[4].split()):
    # True if any whitespace separated value in `row[4]` is a member of whitelist too

您将测试与循环混淆;将
not
移动到生成器表达式中测试表达式中的

if any(item not in row[4] for item in lisst):
项lisst的
部分在
lisst
元素上循环,生成器表达式的第一部分是实际测试

根据
行[4]
的结构,将白名单设置为一组可能更有效:

whitelist = set(lisst)

if whitelist.intersection(row[4].split()):
    # True if any whitespace separated value in `row[4]` is a member of whitelist too

它运行平稳,但生成一个包含所有23行的文件。应该只提供一个文件,其中有1项是专门为不在lisst@WolfHalton:如果没有更多关于
lisst
行[4]
内容的示例详细信息,就无法判断您出了什么问题。您能为您的问题添加一些内容吗?回溯(上次调用):文件“test061.py”,第88行,在main()文件“test061.py”中,第47行,在main c=content(文件名,qu)文件“test061.py”,第83行,在content if splist&row[4]中。拆分():类型错误:不支持的操作数类型(&:“set”和“list”工作(或中断)Python 2.5和更早版本中的代码要求第二个参数也是一个集合:
splist&set(row[4].split())
,它运行平稳,但生成一个包含所有23行的文件。应该只提供一个文件,其中有1项是专门为不在lisst@WolfHalton:如果没有更多关于
lisst
行[4]
内容的示例详细信息,就无法判断您出了什么问题。您能为您的问题添加一些内容吗?回溯(上次调用):文件“test061.py”,第88行,在main()文件“test061.py”中,第47行,在main c=content(文件名,qu)文件“test061.py”,第83行,在content if splist&row[4]中。拆分():类型错误:不支持的操作数类型(&:“set”和“list”工作(或中断)Python 2.5和更早版本中的代码要求第二个参数也是一个集合:
splist&set(行[4].split())