Making csv file from a list

Viewed 79

I have to make simple exchange web, using data from bank. Ive downloaded it and stored in data. Here's my code:

import requests

response = requests.get("http://api.nbp.pl/api/exchangerates/tables/C?format=json")

data = response.json()

Now the problem is how to take "rates" list from it and make a CSV file based on that list, that looks like this:

[
  {
    "table": "C",
    "no": "215/C/NBP/2021",
    "tradingDate": "2021-11-04",
    "effectiveDate": "2021-11-05",
    "rates": [
      {
        "currency": "dolar amerykański",
        "code": "USD",
        "bid": 3.9437,
        "ask": 4.0233
      },
      {
        "currency": "dolar australijski",
        "code": "AUD",
        "bid": 2.9158,
        "ask": 2.9748
      },
      {
        "currency": "dolar kanadyjski",
        "code": "CAD",
        "bid": 3.1679,
        "ask": 3.2319
      },
      # more here
    ]
  }
]

I have no idea how to make it. Can anyone help ?

3 Answers
import csv

import requests

response = requests.get("https://api.nbp.pl/api/exchangerates/tables/C?format=json")
data = response.json()

keys = data[0]["rates"][0].keys()
with open("out.csv", "w", newline="") as f:
    dict_writer = csv.DictWriter(f, keys)
    dict_writer.writeheader()
    dict_writer.writerows(data[0]["rates"])

Try this:

import requests
import csv

response = requests.get("http://api.nbp.pl/api/exchangerates/tables/C?format=json")
data = response.json()
if data:
    with open('rates.csv', 'w') as csv_writer:
        wr = csv.writer(csv_writer)
        wr.writerow(data)

This can easily be done with pandas. Just pass data[0]['rates'] to pd.DataFrame and save as csv:

import requests
import pandas as pd

response = requests.get("http://api.nbp.pl/api/exchangerates/tables/C?format=json")
data = response.json()
df = pd.DataFrame(data[0]['rates'])
df.to_csv('output.csv')
currency code bid ask
0 dolar amerykański USD 3.9437 4.0233
1 dolar australijski AUD 2.9158 2.9748
2 dolar kanadyjski CAD 3.1679 3.2319
3 euro EUR 4.553 4.645
4 forint (Węgry) HUF 0.012646 0.012902
Related