如何使用Python搜索包含某个文本文本的文字?

问题描述:

请看下面的代码。这会在文本文件中找到包含字母'b'的字母并打印所有包含字母'b'的单词?如何使用Python搜索包含某个文本文本的文字?

x = open("text file", "r") 
for line in x: 
    if "b" and in line: print line 

searchfile.close() 

现在这是我的问题。我想不仅仅搜索一个,而是几个字母。 像,a和b都必须在同一个词。 然后打印包含两个字母的单词列表。

我想让用户决定这些字母应该是什么。

我该怎么做?


现在我想出了一些新的东西。读完答案后。

X =打开( “文本文件”, “R”)

在X线: 如果在线路的 “b” 行和 “c” 和 “r” 在线:打印行

这个工作,而不是? 我如何让用户输入字母?

+0

这是一个拼字游戏求解器吗? –

不,你的代码(除了一个事实,即它的语法不正确的),将打印每线具有“B”,不是的话。

为了做你想做的事情,我们需要更多关于文本文件的信息。 Suppossing单词由单个空格分开,你可以做这样的事情

x = open("file", "r") 
words = [w for w in x.read().split() if "a" in w or "b" in w] 
+1

没有空格。 – user959397

+0

Split可以处理任何类型的空白。 ''\ t \ tfee fie \ nfoe fum \ r \ n“.split()'给出'['fee','fie','foe','fum']' –

+0

如果他只想匹配一个单词信?还是三个字母?你的代码应该可能处理所有这些情况。 –

您可以使用设置此:

letters = set(('l','e')) 
for line in open('file'): 
    if letters <= set(line): 
    print line 

在上面,letters <= set(line)测试是否letters每一个元素出现在设置由line的唯一字母组成。

x = open("text file", "r") 
letters = raw_input('Enter the letters to match') # "ro" would match "copper" and "word" 
letters = letters.lower() 
for line in x: 
    for word in line.split() 
     if all(l in word.lower() for l in letters): # could optimize with sets if needed 
      print word 

首先,您需要将文件的内容拆分为单词列表。要做到这一点,你需要将它拆分为换行符和空格,可能也会超出,我不知道。根据需求的复杂程度,您可能需要使用re.split。但是,对于这方面的例子让刚刚去:

words = [] 

with open('file.txt', 'r') as f: 
    for line in f: 
    words += line.split(' ') 

现在,这将有助于效率,如果我们只需要扫描一次的话,想必你只想要一个词来一次最后的名单反正出现,所以我们投这个列表作为一个set

words = set(words) 

然后让那些只含有selected_words所有的字母在其他一些迭代letters

selected_words = [word for word in words if 
    [letter for letter in letters if letter in word] == letters] 

我认为这应该工作。任何关于效率的想法?我不知道这些列表解析如何运行的细节。

+0

如果您正在分割空白,则不需要传递参数进行拆分。正如所写的,'line.split('')'会留下一个尾随的换行符。 –

+0

'[字母中的字母如果字母中的字母的字母] ==字母'可以缩写为'全部(字母中的字母中的字母)' –

+0

我喜欢你只检查一个字。 –