2017-04-26 25 views
0

避免“小数(‘值’)在Python脚本,一个cursor.fetchall命令返回元组的列表,其中的一些元件被标记为例如Decimal('0.50'),而不是仅仅0.50在cursor.fetchall

myList= [(1, 'string1', None, None, 'string2', 0, 'string3'), 
(1, 'string1', Decimal('0.50'), Decimal('2.5'), 'string2', 3, 'string3')] 

究其原因,我想后者的形式(即只0.50)是我试图发送使用print(json.dumps(result))名单,目前返回TypeError: Decimal('0.50') is not JSON serializable

有没有夺走这个“类型”信息的直接途径?我一直在回避这个没有成功,并且我发现以前的相关问题只涉及所有元素都是相同类型的情况(例如, here)。感谢您的任何提示!

+1

这不是“类型信息”,“Decimal”对象与“int”或“float”不同,它是它自己的类。 'decimal.Decimal'。你可能只是做'float(十进制('0.05')' –

+0

你有没有试过http://stackoverflow.com/questions/1960516/python-json-serialize-a-decimal-object? – kennytm

回答

0

这是我克服这个问题的方法。

首先,我转换的查询结果为大熊猫数据帧:

df = pd.DataFrame(query_data) 

然后,我只是麻烦列转换为字符串:

df[2] = [str(r) for r in df[2]] 

最后,我的数据帧转换为CSV字符串:

df_csv = df.to_csv(sep=',', index = False, header = False) 

这可以在print(json.dumps(result))没有错误使用。

非常具体的解决方法,但我认为我会张贴它至少提供一个问题的答案。

相关问题