[英]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.