将特定的键值对从JSON响应写入CSV

2024-04-25 03:43:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用Python构建IPStack API脚本。我无法将JSON输出写入CSV。(此脚本的下一阶段将发送多个ip地址值,因此我需要迭代地执行此操作。)

我一直在想如何告诉Python哪些键值对要写入CSV。下面是我的代码,后面是它返回的错误。你知道吗

如有任何见解,我将不胜感激。你知道吗

import requests
import csv
import json

ip_address = '65.222.2.114'

# key = '?access_key=12345'

full_request = 'http://api.ipstack.com/' + ip_address + '?access_key=12345'

joined_full_request = ''.join(full_request)

r = requests.get(joined_full_request)

output = r.json()

print(output)

with open('/Users/reallymemorable/Desktop/iptest.csv', 'w', newline='') as csvfile:
    fieldnames = ['continent_name', 'country_code', 'country_name', 'region_code', 'region_name', 'city', 'zip', 'latitude', 'longitude']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

    writer.writerow({['continent_name'], ['country_code'], ['country_name'], ['region_code'], ['region_name'], ['city'], ['zip'], ['latitude'], ['longitude']})

错误:

TypeError: unhashable type: 'list'

还有,当我编辑我的编写器.writerow行,例如“output['continent\u name']”,它给了我这个错误:

TypeError: writerow() takes 2 positional arguments but 10 were given

Tags: csvkeynameimportipoutputrequest错误
1条回答
网友
1楼 · 发布于 2024-04-25 03:43:24

在此行中:

writer.writerow({['continent_name'], ['country_code'], ['country_name'], ['region_code'], ['region_name'], ['city'], ['zip'], ['latitude'], ['longitude']})

您可以用{打开,这是字典({k1: v1, k2: v2, ...}),但是您可以尝试在两个大括号中填充一个列表。这是没有任何意义的,你得到的错误,因为Python的东西你试图使用列表作为字典键。你知道吗

您已经创建了一个DictWriter实例,这意味着您需要将字典传递给writerow方法。例如,类似于:

writer.writerow({'continent_name': 'north america',
                 'country_code': '1',
                 'country_name': 'united states',
                 'region_code': 'foo',
                 'region_name': 'bar',
                 'city': 'boston',
                 'zip': '02110',
                 'latitude': 42,
                 'longitude': -72})

如果您试图从JSON结果中写入值,那么只需提取必要的一个或多个键即可。如果您在这方面需要更多帮助,那么您需要更新您的问题,以显示JSON内容的实际外观。你知道吗

相关问题 更多 >