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

Python Unicodedata.normalize:TypeError:normalize()参数2必须是str,而不是list,python,python-3.x,string,list,normalization,Python,Python 3.x,String,List,Normalization,我正在尝试用python加载一个文件。如果您运行下面的代码并加载一个只包含英语单词的文件,它将正常加载 Listado.txt是一个西班牙语文件,包含以下单词:abacá、abadí、abadía、abajeño、abaniquería 西班牙语包含重音字母(例如,é)或特殊字符(变音符号),当我试图将此文件加载到Python中时,问题就出在这里。我希望能够规范化列表,或删除重音字符并加载列表 我已尝试使用以下方法进行规范化: unicodedata.normalize('NFD', line)

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

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

西班牙语包含重音字母(例如,é)或特殊字符(变音符号),当我试图将此文件加载到Python中时,问题就出在这里。我希望能够规范化列表,或删除重音字符并加载列表

我已尝试使用以下方法进行规范化:

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

正如错误所说,您正在尝试
line
,这是一个列表,正如您前面所做的
line=line.split()
。只需在将行拆分为单词之前对其进行规范化,如下所示:

for line in inFile:
    unicodedata.normalize('NFD', line).encode('ascii', 'ignore')
    line = line.split()
    wordlist.extend(line)
    print(" "), len(wordlist), ("words loaded.")
或者,如果要在规范化之前扩展单词列表,可以使用列表理解来分别规范化每个单词

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

更好的做法可能是不重用变量名。并且有两个单独的变量,每个变量的类型都是固定的和可预测的。变量很便宜,这类错误可能很昂贵。