【问题标题】:How To Change Lists of Unicode to ASCII如何将 Unicode 列表更改为 ASCII
【发布时间】:2013-05-06 22:06:30
【问题描述】:

我正在尝试将我从学校年级网站获得的这些列表从 Unicode 更改为 ASCII。

列表如下所示:

x = grades[1]
print x        #Input

[u'B', u'84']  #Output

但我不希望你在里面。我试过用

a.encode('ascii','ignore')

但我明白了

Traceback (most recent call last):
  File "C:\Python27\Project.py", line 33, in <module>
    L1.encode('ascii','ignore')
AttributeError: 'list' object has no attribute 'encode'

有没有办法做到这一点?

【问题讨论】:

  • “我不希望你在里面”意味着一个严重的误解。您的任何对象中都没有u。如果您打印出 Unicode 字符串,将其存储在文件中等,它不会与 u 一起打印,就像它(或常规字符串)与引号一起打印一样。
  • 我将它输入到图像上,以便 u 与其他所有内容一起显示
  • 我不知道你所说的“将它输入到图像上”是什么意思,但无论你在做什么,你一定是做错了......并且“摆脱u”是不会有帮助,因为只要您仍然做同样的错误事情,您仍然会有额外的引号。
  • 我将它作为文本绘制到图片上,然后将该图片作为我的背景我完成了程序,所以它工作正常

标签: python list unicode ascii


【解决方案1】:

问题是您正在尝试编码一个充满字符串的列表,而不是一个字符串。您不能在字符串列表上调用字符串方法;你必须在每个字符串上调用它们。

pythonic 方法是使用list comprehension:

>>> x = [u'B', u'84']
>>> y = [s.encode('ascii', 'ignore') for s in x]
>>> y
['B', '84']

幕后,这基本上是一样的:

>>> x = [u'B', u'84']
>>> y = []
>>> for s in x:
...     y.append(s.encode('ascii', 'ignore'))
>>> y
['B', '84']

但它更简洁,更难出错,并且(一旦你掌握了列表推导的基本概念)更容易阅读。

也与以下任一相同:

y = map(lambda s: s.encode('ascii', 'ignore'), x)
y = map(partial(unicode.encode, encoding='ascii', errors='ignore'), x)

通常,如果您需要编写 lambda 或重要的 partial,列表推导式将比 map 调用更具可读性。但如果您有一个可以使用的函数,map 通常会更好。

【讨论】:

  • 这很好用,但如果不是,我就去那里只得到字母和数字,这很好
  • 什么意思?是否要将字符串'84' 转换为整数84?或者……什么?
【解决方案2】:

您可以简单地将 str() 函数应用于列表的每个元素。在 python 2 中, str 对象是 ASCII 编码的。例如(在 python shell 中):

>>> x = [u'B', u'84']
>>> x
[u'B', u'84']
>>> x[0]
u'B'
>>> x[1]
u'84'
>>> str(x[0])
'B'
>>> str(x[1])
'84'

如果需要列表,您可以使用列表推导:

>>> y = [str(i) for i in x] 
>>> y
['B', '84']

或地图功能:

>>> z = map(str, x)
>>> z
['B', '84']
>>>

希望这是您所寻找的。问候!

【讨论】:

    猜你喜欢
    • 2013-01-07
    • 1970-01-01
    • 1970-01-01
    • 2015-05-08
    • 2011-06-13
    • 2013-02-28
    • 2015-01-09
    • 2015-04-28
    • 1970-01-01
    相关资源
    最近更新 更多