如何用Python在文本文件中搜索包含特定字母的单词?

0 投票
4 回答
6231 浏览
提问于 2025-04-17 02:51

看看下面的代码。这段代码是用来在文本文件中找到字母'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 个回答

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
0

首先,你需要把文件里的内容分成一个个单词。为了做到这一点,你需要根据换行符和空格来分割,可能还要考虑到连字符,我也不太确定。根据需求的复杂程度,你可能想用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]

我觉得这样应该可以工作。关于效率方面有什么想法吗?我不太了解那些列表推导是怎么运行的。

1

不,你的代码(除了语法上有问题)会打印出每一行包含"b"的内容,而不是单独的单词。

要实现你想要的效果,我们需要更多关于文本文件的信息。假设单词之间是用空格分开的,你可以这样做:

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

撰写回答