繁体   English   中英

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

[英]How to search for words containg certain letters in a txt file with Python?

看下面的代码。 这会找到文本文件中包含的字母“ b”,并打印所有包含字母“ b”的单词,对吗?

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”:打印行

这项工作会代替吗​​? 以及如何使用户输入字母?

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

为了执行您想做的事情,我们需要有关文本文件的更多信息。 假设单词被单个空格分隔,您可以执行以下操作

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

您可以为此使用集合:

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(' ')

现在,如果我们只需要扫描一次单词,并且大概您只希望单词在最终列表中出现一次,那么它将提高效率,因此我们将此列表转换为一

words = set(words)

然后仅获取包含所有其他可迭代letters中所有字母的selected_words

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM