在Python中解析单词列表

1 投票
11 回答
6727 浏览
提问于 2025-04-16 13:08

我有一个叫做wlist.txt的文件,里面大约有58000个英文单词,下面是其中的一小部分:

aardvark
aardwolf
aaron
aback
abacus
abaft
abalone
abandon
abandoned
abandonment
abandons
abase
abased
abasement

我想做的是写一个程序,去这个列表里查找一个单词,看看这个单词是否在列表中,如果在的话就打印出来。我的问题是,我写的代码总是返回“没有,这个单词不在列表中”,而我明明知道它是存在的。我的代码是这样的,大家能发现有什么问题吗?

match = 'aardvark'
f = 'wlist.txt'
success = False
try:
    for word in open(f):
        if word == match:
            success = True
            break
except IOError:
    print f, "not found!"
if success:
    print "The word has been found with a value of", word
else:
    print "Word not found"

提前谢谢大家!!

11 个回答

3

大家都给了你很好的建议,关于怎么做这件事,但你真的需要用Python吗?

grep aardvark wlist.txt

这样做几乎肯定会让任何基于Python的解决方案变得很慢。用fgrep可能会更快。

3

这是应该能正常工作的代码

match = 'aardvark'
    f = 'wlist.txt'
    success = False
    try:
        for word in open(f):
            if word.strip() == match: # Change here 
                success = True
                break
    except IOError:
        print f, "not found!"
    if success:
        print "The word has been found with a value of", word
    else:
        print "Word not found"
6

正如其他人所说,你的问题在于换行符也算是你读取的单词的一部分。解决这个问题的最好方法是使用 strip() 方法,它是 str 的一个功能。

另外,你的代码做的事情太多了,其实只需要完成一个简单的任务。你只需要从你的单词列表中创建一个 set,然后在这个集合中查找你想要的单词。用 set 来做这个任务比用 list 要好得多,因为在 set 中查找一个元素的速度要快得多。所以像下面这样做就可以了。

try:
    with open('wordlist.txt', 'rU') as infile:
        wordSet = set(line.strip() for line in infile)
except IOError:
       print 'error opening file'

aWord = 'aardvark'

if aWord in wordSet:
    print 'found word', aWord
else:
    print 'word not found'

注意: if aWord in wordSet 的速度快得让人惊讶。如果你在查找单词列表接近末尾的单词,使用 set 的速度几乎快了 60000 倍,甚至如果你在查找第一个单词,它的速度也还是会快一点。

撰写回答