我正在尝试在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
最佳答案
如错误所言,您尝试像以前一样normalize 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.")
关于python - Unicodedata.normalize:TypeError:normalize()参数2必须是str,而不是list,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59160978/