Python Unicodedata.normalize:TypeError:normalize()参数2必须是str,而不是list
我正在尝试用python加载一个文件。如果您运行下面的代码并加载一个只包含英语单词的文件,它将正常加载 Listado.txt是一个西班牙语文件,包含以下单词:abacá、abadí、abadía、abajeño、abaniquería 西班牙语包含重音字母(例如,é)或特殊字符(变音符号),当我试图将此文件加载到Python中时,问题就出在这里。我希望能够规范化列表,或删除重音字符并加载列表 我已尝试使用以下方法进行规范化: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)
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.")
更好的做法可能是不重用变量名。并且有两个单独的变量,每个变量的类型都是固定的和可预测的。变量很便宜,这类错误可能很昂贵。