2013-05-06 88 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

相關問題