Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.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_Regex - Fatal编程技术网

Python 匹配文件中的单词列表并输出剩余单词

Python 匹配文件中的单词列表并输出剩余单词,python,regex,Python,Regex,我有两个文件。一个是单词列表,比如a.txt,另一个是csv文件,第二行是单词,比如b.csv。我想检查a.txt中的任何单词是否位于b.csv的第二行,并只打印那些不匹配的行。csv文件中总共有3行 到目前为止,我所取得的成就是打印那些包含单词列表中的单词的行。但我要的正是其他的线路。这是我的密码: reader = csv.reader(open('b.csv', 'rb')) op = open('a.txt', 'r') ol = op.readlines() for row in r

我有两个文件。一个是单词列表,比如a.txt,另一个是csv文件,第二行是单词,比如b.csv。我想检查a.txt中的任何单词是否位于b.csv的第二行,并只打印那些不匹配的行。csv文件中总共有3行

到目前为止,我所取得的成就是打印那些包含单词列表中的单词的行。但我要的正是其他的线路。这是我的密码:

reader = csv.reader(open('b.csv', 'rb'))
op = open('a.txt', 'r')
ol = op.readlines()

for row in reader:
     for word in ol:
         if word==row[1]:
             print row[0],row[1],row[2]
现在我该怎么打印不匹配的行呢?
谢谢

侵入性最小的解决方案(即保持嵌套循环)应该是

for row in reader:
    match = False
    for word in ol:
        if word==row[1]:
            match = True
            break

    if not match:
        print row[0],row[1],row[2]
或者使用更多的Python功能:

for row in reader:
    for word in ol:
        if word==row[1]:
            break
    else:
        print row[0],row[1],row[2]
else:
位仅在前一循环正常结束时执行(从未达到
中断

正如thg435所建议的,它更简单:

for row in reader:
    if row[1] not in ol:
        print row[0],row[1],row[2]

谢谢但我很惊讶“其他”是一个比原来的“如果”更倒退的意思。这是平常的事吗?对我来说是新的。
else
属于
的第二个
:我明白了。我从来不知道这件事。这确实是一个很好的教训。谢谢!:)如果第[1]行不在ol中,我想您可以用简单的
替换
中的
。)@thg435哦。。。我可能应该用python编写更多代码;)。谢谢你的建议,答案已编辑。