簡體   English   中英

添加腳本以將 python 結果從 json 導出到 excel 或 Z628CB5675FF524F3E719B7AA2E88FE3Z

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM