请看下面的代码。这会找到包含在文本文件中的字母'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”在行中:打印行
这会改变吗? 如何让用户输入字母?
答案 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]
我认为这应该有效。关于效率的任何想法?我不知道这些列表理解是如何运行的细节。