将字典保存为包含我可以不断添加的列的文件

Pet*_*teG 2 python dictionary currency file

我有货币的字典这里JSON.

为简单起见,我将提供一个示例:

{
    "AED": "united Arab Emirates Dirham",
    "AFN": "Afghan Afghani",
    ...
    "ZWL": "Zimbabwean Dollar"
}
Run Code Online (Sandbox Code Playgroud)

我希望将它们添加到一个文件中,我可以在不同的时间不断添加不同的货币组.该文件应具有货币代码名称的列(例如"AED")和名称的另一列.

我真的不知道从哪里开始.将非常感谢帮助指出我正确的方向.

我的字典代码如下:

import json
import urllib.request
def _fetch_currencies():
    f = urllib.request.urlopen(
        'http://openexchangerates.org/api/currencies.json')
    charset = f.info().get_param('charset', 'utf8')
    data = f.read()
    decoded = json.loads(data.decode(charset))
    print(json.dumps(decoded, indent=4))
Run Code Online (Sandbox Code Playgroud)

Fra*_*las 5

您可以csv使用每种货币一行保存数据:

AED, united Arab Emirates Dirham
AFN, Afghan Afghani
ZWL, Zimbabwean Dollar
Run Code Online (Sandbox Code Playgroud)

要做到这一点,您可能希望将字典转换为行,但在这种情况下,它是微不足道的,因为它只是对(key, value):

rows = decoded.items()
Run Code Online (Sandbox Code Playgroud)

但请注意,项目将以随机顺序排列,如果您希望对条目进行排序,则可以在写入文件之前对它们进行排序:

rows.sort()
Run Code Online (Sandbox Code Playgroud)

最后,使用csv模块:

import csv
with open('local_file.csv', 'w') as my_csv:
    csv_writer = csv.writer(my_csv, delimiter=',')
    csv_writer.writerows(sorted(decoded.items()))
Run Code Online (Sandbox Code Playgroud)

把它们放在一起:

import json
import urllib.request
import csv

def fetch_currencies():
    f = urllib.request.urlopen('http://openexchangerates.org/api/currencies.json')
    charset = f.info().get_param('charset', 'utf8')
    data = f.read()
    decoded = json.loads(data.decode(charset))
    return decoded

def save_currencies(currencies, filename):
    sorted_currencies = sorted(currencies.items())
    with open(filename, 'w') as my_csv:
        csv_writer = csv.writer(my_csv, delimiter=',')
        csv_writer.wrtiterows(sorted_currencies)

save_currencies(fetch_currencies(), 'currencies.csv')
Run Code Online (Sandbox Code Playgroud)