Unicodedata.normalize : TypeError: normalize() argument 2 must be str, not list

1 人关注

我正在尝试用python加载一个文件。如果你运行下面的代码,加载一个只包含英语单词的文件,它就能正常加载。

Listado.txt是一个西班牙语言文件,其中包含以下词语:abacá, abadí, abadía, abajeño, abaniquería

西班牙语包含重音字母(如é)或特殊字符(diacritics),问题就出在这里,当我试图把这个文件加载到Python中时,它就抱怨了。我希望能够对列表进行规范化处理,或者删除重音字符并加载列表。

我曾试着用.NET的方式来规范化。

unicodedata.normalize('NFD', line).encode('ascii', 'ignore')

我得到了以下错误。

TypeError: normalize()参数2必须是str,而不是list

到目前为止的代码:

import random
import string
import unicodedata
#WORDLIST_FILENAME = "words_alpha.txt"
WORDLIST_FILENAME = "listado.txt"
def loadWords():
    print("Loading word list from file...")
    # inFile: file
    inFile = open(WORDLIST_FILENAME, 'r')
    wordlist =[]
    for line in inFile:
        line = line.split()
        wordlist.extend(line)
#        unicodedata.normalize('NFD', line).encode('ascii', 'ignore')
        print(" "), len(wordlist), ("words loaded.")
    return wordlist
    
python
python-3.x
string
list
normalization
Gabe H. Coud
Gabe H. Coud
发布于 2019-12-04
1 个回答
CDJB
CDJB
发布于 2019-12-04
已采纳
0 人赞同

正如错误所说,你正在尝试 正常化 line , which is a list, as you've done line = line.split() earlier. Just 正常化 the line before you split it into words, as follows:

for line in inFile:
    unicodedata.normalize('NFD', line).encode('ascii', 'ignore')
    line = line.split()
    wordlist.extend(line)
    print(" "), len(wordlist), ("words loaded.")

Alternatively, if you want to extend your wordlist before normalizing, you can do the following using a list comprehension to 正常化 each word individually.

for line in inFile: