【问题标题】:Python3 save a json to a csv file from Coingeko APIPython3 从 Coingeko API 将 json 保存到 csv 文件
【发布时间】:2021-08-19 08:43:24
【问题描述】:

我正在努力将 json 文件转换为 csv 文件。任何帮助,将不胜感激。我正在使用 Python3

代码

import json
import urllib.request

url = 'https://api.coingecko.com/api/v3/coins/bitcoin/market_chart?vs_currency=usd&days=1&interval=daily&sparkline=false'
req = urllib.request.Request(url)

##parsing response
myfile=open("coingecko1.csv","w",encoding="utf8")
headers="Prices,MrkCap,TolVol \n"
myfile.write(headers)

r = urllib.request.urlopen(req).read()
cont = json.loads(r.decode('utf-8'))

print (cont)#Just to check json result

for market in cont:
    prices =(cont["prices"])
    market_caps = (cont["market_caps"])
    total_volumes = (cont["total_volumes"])
    content= prices+","+str(market_caps)+","+str(total_volumes)+" \n"
    myfile.write(content)
print("job complete")

Python 结果

{'prices': [[1629331200000, 45015.46554608543], [1629361933000, 44618.52978218442]], 'market_caps': [[1629331200000, 847143004614.999], [1629361933000, 837151985590.3453]], 'total_volumes': [[1629331200000, 34668999387.83819], [1629361933000, 33367392889.386738]]}
Traceback (most recent call last):
  File "ma1.py", line 22, in <module>
    content= prices+","+str(market_caps)+","+str(total_volumes)+" \n"
TypeError: can only concatenate list (not "str") to list

CSV 结果

CSV Result

谢谢

【问题讨论】:

    标签: json python-3.x api csv coingecko


    【解决方案1】:

    您的 JSON 是嵌套的,它是列表列表。要在 CSV 中轻松阅读,您必须将其展平 我已重新格式化代码以转储到 CSV。看看下面

    import csv
    import json
    import urllib.request
    
    url = 'https://api.coingecko.com/api/v3/coins/bitcoin/market_chart?vs_currency=usd&days=1&interval=daily&sparkline=false'
    req = urllib.request.Request(url)
    
    r = urllib.request.urlopen(req).read()
    
    cont = json.loads(r.decode('utf-8'))
    
    # flatten the JSON data to read csv easily
    flatten_data = {}
    for key in cont:
        for value in cont[key]:
            if value[0] not in flatten_data:
                flatten_data[value[0]] = {}
            flatten_data[value[0]].update({key: value[1]})
    
    # write csv with DictWriter
    with open('coingecko1.csv', 'w', encoding='utf-8') as csvfile:
        headers = ['Item', 'Prices', 'MrkCap', 'TolVol']
        writer = csv.DictWriter(csvfile, fieldnames=headers)
    
        writer.writeheader()
        for k, v in flatten_data.items():
            v.update({'Item': k})
    
            # renamed the columns as required
            v['Prices'] = v.pop('prices')
            v['MrkCap'] = v.pop('market_caps')
            v['TolVol'] = v.pop('total_volumes')
            writer.writerow(v)
    
    print("job complete")
    

    【讨论】:

    • 非常感谢我的朋友。这非常有效。
    猜你喜欢
    • 2020-08-19
    • 2021-02-11
    • 2021-09-08
    • 2019-08-23
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    相关资源
    最近更新 更多