2015-03-08 132 views
0

我有以下代碼無法解碼的Unicode

results = requests.get("https://www.kimonolabs.com/api/ano64pm6?apikey=9ummN7C6KMHu9aErm49ixoy2ZySmaKCm").json() 
mmoga = ([x["price"] for x in results["results"]["collection1"]]) 
print mmoga 

此輸出以下:

[u'\xa3\xa04.03', u'\xa3\xa06.02', u'\xa3\xa07.99', u'\xa3\xa09.96', u'\xa 
\xa011.91', u'\xa3\xa013.84', u'\xa3\xa015.76', u'\xa3\xa017.67', u'\xa 
\xa019.56', u'\xa3\xa029.24', u'\xa3\xa038.84', u'\xa3\xa048.38', u'\xa 
\xa057.84', u'\xa3\xa067.23', u'\xa3\xa076.56', u'\xa3\xa085.81', u'\xa 
\xa094.99', u'\xa3\xa0113.57', u'\xa3\xa0132.00', u'\xa3\xa0150.29',u'\xa3 
\xa0168.45', u'\xa3\xa0186.46', u'\xa3\xa0204.33', u'\xa3 \xa0222.06', 
u'\xa3 \xa0239.65', u'\xa3\xa0257.10', u'\xa3\xa0274.43'] 
[u'\xa3\xa04.03', u'\xa3\xa06.02', u'\xa3\xa07.99', u'\xa3\xa09.96', u'\xa 
\xa011.91', u'\xa3\xa013.84', u'\xa3\xa015.76', u'\xa3\xa017.67', u'\xa3  
\xa019.56', u'\xa3\xa029.24', u'\xa3\xa038.84', u'\xa3\xa048.38', u'\xa3 
\xa057.84', u'\xa3\xa067.23', u'\xa3\xa076.56', u'\xa3\xa085.81', u'\xa3 
\xa094.99', u'\xa3\xa0113.57', u'\xa3\xa0132.00', u'\xa3\xa0150.29', u'\xa3 
\xa0168.45', u'\xa3\xa0186.46', u'\xa3\xa0204.33', u'\xa3\xa0222.06', u'\xa3 
\xa0239.65', u'\xa3\xa0257.10', u'\xa3\xa0274.43'] 

然後我試圖擺脫使用下面的代碼中的所有字母:

while i< len(mmoga): 
mmoga[i] = mmoga[i].translate(None, 'absdefghijklmnopqrstuvwxyz;&£$') 
i+=1 

這給出了錯誤信息

translate() takes exactly one argument (2 given) 

從一些搜索我認爲,這是由於爲Unicode不被解碼,但我很新的Python和我已經找到了所有解決方案都在Python 3

+0

你爲什麼不使用Python3?最小示例代碼在哪裏? – 2015-03-08 22:21:57

+0

我有一個相當大的網頁抓取程序寫入其他網站,所以必須將其全部轉換爲Python 3,這會花費我相當多的時間,因爲我相當新的Python – andy 2015-03-08 22:24:29

+0

@Ulrich:爲什麼Python 3會執行此任務更輕鬆?唯一顯着的區別是,表示法將顯示Unicode字形而不是轉義序列,但它不會幫助理解實際發生的事情。 – 2015-03-08 23:36:42

回答

2

你成功解碼的內容,但\xa3\xa0字符可能會讓您感到困惑。這些僅僅是U+00A3 POUND SIGNU+00A0 NO-BREAK SPACE字符,但Python僅包含unicode字符串表示形式中的ASCII字符,其餘部分在此處顯示爲轉義序列。單獨的值

打印一個:

>>> print u'\xa3\xa04.03' 
£ 4.03 

unicode.translate()方法從str.translate工作方式不同。要刪除字符,請將它們放在第一個參數中作爲映射到None的字典。

我會使用str.strip()這裏:

>>> u'\xa3\xa04.03'.strip(u'\xa3\xa0') 
u'4.03'