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

Python:查找具有内部空白的子字符串

Python:查找具有内部空白的子字符串,python,Python,我有一张单子。我正在检查这些单词是否出现在文件中。这是我的代码: for word in wordlist: print word for thefile in filelist: handle = open(thefile) filecontents = handle.read() if word in filecontents: print word, 'occurs', "in", thefile

我有一张单子。我正在检查这些单词是否出现在文件中。这是我的代码:

for word in wordlist:
    print word
    for thefile in filelist:
        handle = open(thefile)
        filecontents = handle.read()
        if word in filecontents:
            print word, 'occurs', "in", thefile
        handle.close()
如果我列表中的所有单词都是单个单词,那么代码就可以完美地工作。如果其中任何一个单词是短语(即两个带有内部空格的单词,例如,“MessageBroker”),则该选项无效

我哪里做错了?我是Python新手

[更新] 以下是我的词汇表:

  • 安装
  • postreq
  • 消息代理

该代码报告其中包含“install”和“postreq”的文件的所有实例,但不报告“messagebroker”的任何内容。我知道有些文件有这样一个短语(“MessageBroker”)。

错误在于创建
单词列表的方式,而您没有显示。也许您可以使用
.split()
创建它,它会在每个空格处拆分。或者,您可能正在从带有
readlines()
的文件中读取单词列表,该文件不会丢弃最后的换行符。毫无疑问,如果
“messagebroker”
在单词列表中,它将匹配包含相同字符序列的任何字符串(单词之间只有一个空格)


事实上,如果您正确构建列表,您的代码将过度响应:例如,它将告诉您“bat”出现在“manufacturer's rebate”中。它是这样做的,因为它是一个子字符串。

没有理由
这个句子中的“某些单词”会返回
False
。为什么要重复打开和关闭文件?您确定没有
“message broker\n”
,情况也是一样吗?您是如何意识到“如果其中任何一个单词是一个短语,它就不起作用的”?正如上面评论中指出的,“message broker”应该在“某个message broker语句”中,除非您有“某个message broker语句”你能举一个不起作用的短语的例子吗?一个样本文件怎么样?这将使调试更容易。是的,我使用的是
word=word.strip()
,这不是正确的方法?不如你展示一下你是如何构建单词列表的,然后有人会马上修复它。对不起,我读的是
split()
,而不是
strip()
!我的错。使用
strip()
是个好主意,不应该删除内部空格。谢谢!完美的我刚刚使用了
rstrip()
,在目录中找到了5个“MessageBroker”。我没有足够的声誉来支持你的答案,但是是的,这就是我错的地方。很高兴你现在得到了更好的结果,尽管我不太清楚为什么:-)。一定要展示你是如何列清单的。