[英]Adding scrip to export python result from json to excel or csv file
我是 Python 世界的新手,所以很抱歉。 我正在研究從 API 下載的一組時間序列。 這些數據已打印為 JSON 文件(如下面的代碼所示)。 但是,如何將此數據從 JSON 轉換為 EXCEL 或 CSV?
以下是我使用的:
import requests
payload = "{\"startDate\": 20190930, \"endDate\": 20191018, \"tags\":[\"PAYMENT.REIMBURSEMENT.1Y.BLOOMBERG\"]}"
headers = {
'content-type': "application/json",
'accept': "application/json",
'authorization': "Bearer AAIkOWNmNGVjMzctYTg5MC00YjhiLWE4MTEtNmE4ZDUzMzU1OWVlGUDsir"
}
proxyDict = {"http": "http://webproxy.payment.nsroot.net:8080/", "https": "http://payment.nsroot.net:8080/"}
r = requests.post(url="https://payment.com/data?client_id=9cf4ec37-a890-4b8b-a811-6a8d533559ee", data=payload, headers=headers, proxies=proxyDict)
print(r.json())
以下是上述代碼提供的結果。
{'頻率':'每日','正文':{'PAYMENT.REIMBURSEMENT.1Y.BLOOMBERG':{'x':[20190930, 20191001, 20191002, 20191003, 20191004, 20191007, 20191008, 010191009, 20191009, 20191009, 2 20191014、20191015、20191016、20191017、20191018],'c':[[60.0392、60.0391、60.0391、60.0391、60.0391、60.0391、60.0391、60.0391、60.0391 ],“類型”:“系列”}},“狀態”:“確定”}
您能告訴我如何將其轉換為 csv 文件嗎? 其中 A 列是 (yyyymmdd) 中的日期,B 列是如下值>
日期值20190930 60.0392... ... 20191018 60.039
謝謝你。
result = list(zip(test['body']['PAYMENT.REIMBURSEMENT.1Y.BLOOMBERG']['x'], test['body']['PAYMENT.REIMBURSEMENT.1Y.BLOOMBERG']['c']))
import csv
with open('PAYMENT.REIMBURSEMENT.1Y.BLOOMBERG', 'w', newline='') as csvfile:
fieldnames = ['Date', 'values']
writer = csv.writer(csvfile, delimiter=',',
quotechar='|', quoting=csv.QUOTE_MINIMAL)
writer.writerow(fieldnames)
for row in result:
writer.writerow(row)
如果您需要轉換為 excel 的表名稱,則代碼如下。
import pandas as pd
df = pd.DataFrame(result, columns=['Date', 'values'])
df.to_excel('file.xlsx', sheet_name='PAYMENT.REIMBURSEMENT.1Y.BLOOMBERG', index=False)
首先為您的桌面創建一個路徑,並將其放入一個常量中(通常在 UPPER_CASE 中注明):
import pathlib
DESKTOP_PATH = pathlib.Path('/Users/user_name/Desktop')
遍歷 json 正文中的鍵和值,根據您的請求,鍵用作文件名,這就是為什么它以該名稱保存在變量中的原因,值是保存 csv 數據的字典:
for file_name, data in r.json()['body']:
csv_rows = '\n'.join(','.join(values) for values in zip(*data.values()))
(DESKTOP_PATH / filename).write_text(f'{",".join(data.keys())}\n{csv_rows}')
在 for 循環中,我們構建了與每個文件對應的 csv: zip(*data.values())
將保存[column_a_values, column_b_values, ...]
形式的列表列表的值列表轉換為迭代器,它將同一行上的所有元素組合在一起。 即list(zip(*[[1, 2, 3], [4, 5, 6], [7, 8, 9]]))
等於[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
。
然后,我們使用','.join(values)
用逗號將一行中的所有值連接起來,並使用'\n'.join(...)
將行與它們之間的新行連接起來。
最后,我們在一個 go 中使用 write_text 將所有文本寫入桌面路徑和DESKTOP_PATH / filename
給出的文件名的串聯,最終文本由f'{",".join(data.keys())}\n{csv_rows}'
首先輸出列名,然后是我們上面計算的行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.