python - Unicodedata.normalize : TypeError: normalize() argument 2 must be str, 未列出

标签 python python-3.x string list normalization

我正在尝试在 python 中加载文件。如果您运行下面的代码并加载仅包含英文单词的文件,它将加载得很好。

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

西类牙语包含重音字母(例如 é)或特殊字符(变音符号),这就是问题所在,当我尝试将此文件加载到 Python 中时,它会提示。我希望能够标准化列表,或删除重音字符并加载列表。

我尝试使用标准化:

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

我收到以下错误:

类型错误:normalize()参数2必须是str,而不是列表

到目前为止的代码:

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() argument 2 must be str, 未列出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59160978/

相关文章:

python - 向量化列表理解中的嵌套 for 循环

string - tinyurl 之类的网站如何生成网址?

python - 如何动态分配参数值

python - 如何找到第一个非零元素和最后一个非零元素并修剪它

python - 使用 asyncio 并行化生成器

python-3.x - 使用 Python 将 Azure Blob 存储数据直接推送到 POST 请求中

Javascript 正则表达式查找可以跨多行中断的特定字符串

javascript - typescript:从条件类型派生类型

python - 使用父类中的方法定义属性

python - 使用 Python pywin32 将击键发送到交互式 win32 控制台应用程序