Skip to main content
 首页 » 编程设计

Python之解码列表中的 utf-8 列表(解码整个列表对象)

2025年05月04日28wayfarer

假设我有一个列表,其中有多个列表,例如:

l = [['a'],['a','b'],['c'],['d',['a','b'],'f']] 

用这个:

l = [x.decode('UTF8') for x in l] 

可能我会得到错误:列表对象没有属性“解码”

(“l”列表是从标记化文本创建的,它的每个单词都是列表对象。尝试了很多解决方案来克服解码难题,但仍然无法打印非 ascii 字符)

with open(path, "r") as myfile: 
    text=myfile.read() 
 
text = word_tokenize(text) 
 
d = [[item] if not isinstance(item, list) else item for item in text] 
 
arr = sum(([[x[0] for x in g]] if k else list(g) 
     for k, g in groupby(d, key=lambda x: x[0][0].isupper())), 
    []) 
 
arr = [x.decode('UTF8') for x in arr] 

INPUT(我的文本文件):

Çanakkale çok güzel bir şehirdir. Çok beğendik. 

输出:

[[u'\xc7anakkale'], [u'\xe7ok'], [u'g\xfczel'], [u'bir'], [u'\u015fehirdir'], [u'.']. [u'\xe7ok'], [u'be\u011fendik'], [u'.']] 

我想要的输出是列表,但与我的输入格式完全一样。

请您参考如下方法:

首先,你认为你遇到的问题是你正在打印整个列表(你没有在你的问题中包括那部分所以我不得不猜测) - Python 正在打印安全的表示 的数据。对您来说,这意味着它表明您有 Unicode 字符串(因此是 u'')并且它显示了非 ASCII 字符的 Unicode 点十六进制值。

如果您要打印列表的单个部分,那么您会得到您期望的结果。

即

>>> print arr[0][0] 
Çanakkale 

如果你想打印所有的值,你需要一个 for 循环:

for x in arr: 
    for y in x: 
        print y 

您还通过手动解码代码深处的数据引入了不必要的复杂性 - 相反,您应该解码输入数据。

看来您正在使用 Python 2.x(通过 u'' 前缀),因此请使用 io 模块在您阅读文本数据时对其进行解码:

import io 
with io.open(path, "r", encoding="utf-8") as myfile: 
    text=myfile.read() 

现在您可以删除 arr = [x.decode('UTF8') for x in arr] 行。