Python-遍历API并将Dict写入csv

时间:2018-11-19 15:13:44

标签: python api csv web-scraping

我正在遍历API来检索多个ICO令牌的数据。现在,我想将数据保存到csv中,每个ICO令牌的列和行中都有变量。基本代码有效,我有2个问题: -条目仅写在第二行中,这是不切实际的。如何指定不将行留空? -可变价格本身就是一个列表,因此保存为单个项目(内部包含1个以上变量)。如何分解列表以每列写一个变量?

在这里查看我的代码:

ICO_Wallet = '0xe8ff5c9c75deb346acac493c463c8950be03dfba', 
'0x7654915a1b82d6d2d0afc37c52af556ea8983c7e', 
'0x4DF812F6064def1e5e029f1ca858777CC98D2D81'

for index, Wallet in enumerate(ICO_Wallet) :
    Name = ICO_name[index]
    Number = ICO_No[index]

    try: 
        URL = 'http://api.ethplorer.io/getTokenInfo/' + Wallet + '?apiKey=freekey'
    except: 
        print(Wallet)

    json_obj = urlopen(URL) 
    data = json.load(json_obj)

    with open('token_data_test.csv','a') as f:
        w = csv.writer(f, delimiter=";")
        w.writerow(data.values())

    time.sleep(1)

示例输出:

data Out[59]: 
{'address': '0x8a854288a5976036a725879164ca3e91d30c6a1b',
 'countOps': 24207,
 'decimals': '18',
 'ethTransfersCount': 0,
 'holdersCount': 10005,
 'issuancesCount': 0,
 'lastUpdated': 1542599890,
 'name': 'GET',
 'owner': '0x9a417e4db28778b6d9a4f42a5d7d01252a3af849',
 'price': {'availableSupply': '11388258.0',
           'currency': 'USD',
           'diff': -20.71,
           'diff30d': -14.155971452386,
           'diff7d': -22.52,
           'marketCapUsd': '2814942.0',
           'rate': '0.2471792958',
           'ts': '1542641433',
           'volume24h': '2371.62380719'},
 'symbol': 'GET',
 'totalSupply': '33368773400000170376363910',
 'transfersCount': 24207}

1 个答案:

答案 0 :(得分:0)

如前所述,这是解决第一个问题的简便方法,只需像这样修改csv.writer行:

w = csv.writer(f, delimiter=";", lineterminator='\n')

对于第二个问题,您可以先将json展平,然后再进入csv

for k, v in data.pop('price').items():
         data['price_{}'.format(k)] = v

这会将price下的所有项目更改为price_itemname作为展平键。 .pop()方法还有助于同时删除'price'键。

结果:

{'address': '0x8a854288a5976036a725879164ca3e91d30c6a1b',
 'countOps': 24207,
 'decimals': '18',
 'ethTransfersCount': 0,
 'holdersCount': 10005,
 'issuancesCount': 0,
 'lastUpdated': 1542599890,
 'name': 'GET',
 'owner': '0x9a417e4db28778b6d9a4f42a5d7d01252a3af849',
 'price_availableSupply': '11388258.0',
 'price_currency': 'USD',
 'price_diff': -20.71,
 'price_diff30d': -14.155971452386,
 'price_diff7d': -22.52,
 'price_marketCapUsd': '2814942.0',
 'price_rate': '0.2471792958',
 'price_ts': '1542641433',
 'price_volume24h': '2371.62380719',
 'symbol': 'GET',
 'totalSupply': '33368773400000170376363910',
 'transfersCount': 24207}

现在,您可以将其传递到csv.writer()中。