在Python中解析单词列表
我有一个叫做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 倍,甚至如果你在查找第一个单词,它的速度也还是会快一点。