2015-03-08 129 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'