Python 文本文件中的单词列表
我需要从文本文件创建一个单词列表。该列表将用于刽子手代码,需要从列表中排除以下内容:Python 文本文件中的单词列表,python,parsing,Python,Parsing,我需要从文本文件创建一个单词列表。该列表将用于刽子手代码,需要从列表中排除以下内容: 重复字 包含少于5个字母的单词 包含“xx”作为子字符串的单词 包含大写字母的单词 然后需要将单词列表输出到文件中,以便每个单词都显示在自己的行中。 程序还需要输出最终列表中的字数 这是我的,但它不能正常工作 def MakeWordList(): infile=open(('possible.rtf'),'r') whole = infile.readlines() infile.cl
def MakeWordList():
infile=open(('possible.rtf'),'r')
whole = infile.readlines()
infile.close()
L=[]
for line in whole:
word= line.split(' ')
if word not in L:
L.append(word)
if len(word) in range(5,100):
L.append(word)
if not word.endswith('xx'):
L.append(word)
if word == word.lower():
L.append(word)
print L
MakeWordList()
您多次使用此代码添加单词,
实际上,你根本就不会过滤掉这些单词,只是根据它们通过的
数量,给它们添加不同的计时次数
如果
,则应组合所有的:
if word not in L and len(word) >= 5 and not 'xx' in word and word.islower():
L.append(word)
或者,如果您希望它更具可读性,您可以拆分它们:
if word not in L and len(word) >= 5:
if not 'xx' in word and word.islower():
L.append(word)
但是不要在每一个词后面加上后缀。想想看:在嵌套的if语句中,任何不在列表中的词都会在第一行中通过。然后,如果是5个或更多字符,它将被再次添加(我打赌),等等。您需要重新考虑if语句中的逻辑。改进代码:
def MakeWordList():
with open('possible.rtf','r') as f:
data = f.read()
return set([word for word in data if len(word) >= 5 and word.islower() and not 'xx' in word])
set(\u iterable)
返回一个没有重复项的set类型对象(所有set
项必须是唯一的)<代码>[逐字…]
是一种列表理解,是创建简单列表的较短方法。您可以迭代“数据”中的每个单词(假设每个单词位于单独的一行)<代码>如果len(word)>=5,word.islower()而不是word中的“xx”满足最后三个要求(必须超过5个字母,只有小写字母,不能包含“xx”)。它是如何工作不正常的?你期望发生什么,以及真正发生什么?它不会删除少于5个字母的单词,并保留大写字母。而不是word.endswith('xx')
它应该是@twasbrillig中的'xx',然后“abxxcd”
也会匹配。这不是他想要的。让我澄清一下。而不是而不是word.endswith('xx')
它应该是而不是word中的'xx'。否则“abxxcd”
也会匹配,这不是他想要的。@twasbrillig我明白了,我从OP的代码中假设他只想要结尾有“xx”
。从他的描述来看似乎不正确。接得好。