如何用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")
for line in x: if "b" in line and "c" in line and "r" in line: print line
这样做可以吗?还有,我该怎么让用户输入字母呢?
4 个回答
在编程中,有时候我们需要把一些东西放到一个地方,然后在需要的时候再把它拿出来。这就像把书放到书架上,想看书的时候再去拿。
有一种叫做“栈”的结构,它就像一个书架,只能从顶上拿书。你先放的书在下面,后放的书在上面,想要拿书的时候只能先拿上面的那本。
栈有两个主要的操作:一个是“压栈”,就是把东西放进去;另一个是“弹栈”,就是把东西拿出来。这样可以确保我们总是先拿到最后放进去的东西。
这种结构在编程中非常有用,比如在处理函数调用的时候,程序会把每个函数的状态放到栈里,等到函数执行完再把状态拿出来。
总之,栈是一种简单而有效的方式来管理数据,特别是在需要遵循特定顺序的时候。
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)
接下来,为了得到那些selected_words
,它们包含某个其他可迭代对象letters
中的所有字母:
selected_words = [word for word in words if
[letter for letter in letters if letter in word] == letters]
我觉得这样应该可以工作。关于效率方面有什么想法吗?我不太了解那些列表推导是怎么运行的。
不,你的代码(除了语法上有问题)会打印出每一行包含"b"的内容,而不是单独的单词。
要实现你想要的效果,我们需要更多关于文本文件的信息。假设单词之间是用空格分开的,你可以这样做:
x = open("file", "r")
words = [w for w in x.read().split() if "a" in w or "b" in w]