2017-04-26 29 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))沒有錯誤使用。

非常具體的解決方法,但我認爲我會張貼它至少提供一個問題的答案。

相關問題