如果不是文件文本中的字符串

时间:2016-02-26 15:41:01

标签: python python-2.7 python-3.x

我有一个这种格式的file_text

the workers have human rights.
the women have rights.
the people have to work.

我有一些这样的术语

li = "human rights,the women"

我需要打印file_text的行,其中li中没有一个术语。为此,我尝试了

for line in file_text.splitlines():
    for i in li.split(","):
            if not i in line.casefold():
                    print(line)

这段代码给出了那些条款中没有的条款,可以告诉我为什么这里“不”不起作用?

2 个答案:

答案 0 :(得分:1)

目前,只要行中的任何单词,就会打印该行。您必须检查中没有任何字样。最简单的方法是使用' any'功能:

for line in file_text.splitlines():
    if not any(i in line.casefold() for i in li.split(",")):
        print(line)

如果您还需要知道该行中出现的单词,您可以在条件列表推导中收集这些单词,然后检查该列表是否为空:

for line in file_text.splitlines():
    contained = [i for i in li.split(",") if i in line.casefold()]
    if contained:
        print(line, "contains", contained)
    else:
        print(line, "contains none of those words")

答案 1 :(得分:0)

算法背后的思路存在问题。想一想:

由于"逐个"迭代:

首先如果"人权"不符合要求它会被打印出来,所以"女人"将被打印。

然后排行"女人"将在不存在的情况下进行打印,以及#34;人权和#34;也将印刷线条。

为了避免这种情况,请尝试使用any或计数器等其他方法来查看li中的一个或两个元素。