如何使用Python在文本文件中搜索包含某些字母的单词?

时间:2011-09-22 15:19:02

标签: python

请看下面的代码。这会找到包含在文本文件中的字母'b'并打印包含字母'b'的所有单词吧?

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

searchfile.close()

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

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

我该怎么做?


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

x = open(“text file”,“r”)

表示x行:     如果“b”在行中,“c”在行中,“r”在行中:打印行

这会改变吗? 如何让用户输入字母?

4 个答案:

答案 0 :(得分:1)

不,你的代码(除了它在语法上不正确的事实),将打印每个,其中包含“b”,而不是单词。

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

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

答案 1 :(得分:0)

你可以使用套装:

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

在上文中,letters <= set(line)测试letters的每个元素是否都出现在由line的唯一字母组成的集合中。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

首先,您需要将文件的内容拆分为单词列表。要做到这一点,你需要将它拆分为换行符和空格,也可能是大肆宣传,我真的不知道。您可能希望使用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]

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