Python 文本文件中的单词列表

Python 文本文件中的单词列表,python,parsing,Python,Parsing,我需要从文本文件创建一个单词列表。该列表将用于刽子手代码,需要从列表中排除以下内容: 重复字 包含少于5个字母的单词 包含“xx”作为子字符串的单词 包含大写字母的单词 然后需要将单词列表输出到文件中,以便每个单词都显示在自己的行中。 程序还需要输出最终列表中的字数 这是我的,但它不能正常工作 def MakeWordList(): infile=open(('possible.rtf'),'r') whole = infile.readlines() infile.cl

我需要从文本文件创建一个单词列表。该列表将用于刽子手代码,需要从列表中排除以下内容:

  • 重复字
  • 包含少于5个字母的单词
  • 包含“xx”作为子字符串的单词
  • 包含大写字母的单词
  • 然后需要将单词列表输出到文件中,以便每个单词都显示在自己的行中。 程序还需要输出最终列表中的字数

    这是我的,但它不能正常工作

    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”
    。从他的描述来看似乎不正确。接得好。