2013-05-06 86 views
0

我试图将我从学校成绩网站从Unicode更改为ASCII的这些列表。如何将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' 

反正是有这样做吗?

+0

“我不希望你在那里”意味着一个严重的误解。你的任何物体都没有'u'。如果你打印出一个Unicode字符串,将它存储在一个文件等中,它不会用'u'打印,而是用引号打印(或常规字符串)。 – abarnert 2013-05-06 22:49:23

+0

即时消息输入到一个图像,所以你出现了一切 – Serial 2013-05-06 22:56:10

+1

我不知道你是什么意思的“输入到一个图像”,但无论你在做什么,你一定是做错了......而“摆脱“u”不会有帮助,因为只要你仍然做同样的错误事情,你仍然会有额外的引号。 – abarnert 2013-05-06 23:56:42

回答

3

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

>>> 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'] 
>>> 

希望这是你想要的。问候!

4

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

的Python的方式做,这是一个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通常更好。

+0

这工作正常,但我在那里得到只是信和数字,如果不是这样很好 – Serial 2013-05-06 22:21:30

+0

你是什么意思?你想把字符串'84'转换成整数'84'吗?或者是什么? – abarnert 2013-05-06 22:48:30

+0

尽管我没有感谢你! – Serial 2013-05-06 22:55:22

相关问题