如何将 python-request JSON 结果转换为 csv?
How to convert python-request JSON results to csv?
我正在尝试使用他们的 API 端点 url 和 python 中的请求模块从我的 WIX 网站获取我的联系人列表。我完全被困住了。
到目前为止,这是我的代码:
import requests
auth_key = "my auth key"
r = requests.get("https://www.wixapis.com/crm/v1/contacts", headers={"Authorization": auth_key})
print(r.status_code)
dict = r.json()
contacts_list = dict["contacts"]
for i in contacts_list:
for key in i:
print(key, ':', i[key])
这是我得到的:
200
id : long id string 1
emails : [{'tag': 'UNTAGGED', 'email': 'sampleemail1@yahoo.com'}]
phones : []
addresses : [{'tag': 'UNTAGGED', 'countryCode': 'US'}]
metadata : {'createdAt': '2020-07-08T22:41:07.135Z', 'updatedAt': '2020-07-08T22:42:19.327Z'}
source : {'sourceType': 'SITE_MEMBERS'}
id : long id string 2
emails : [{'tag': 'UNTAGGED', 'email': 'sampleemail2@yahoo.com'}]
phones : []
addresses : []
metadata : {'createdAt': '2020-07-03T00:51:21.127Z', 'updatedAt': '2020-07-04T03:26:16.370Z'}
source : {'sourceType': 'SITE_MEMBERS'}
Process finished with exit code 0
每一行都是一个字符串。我需要 csv 的每一行都是一个新联系人(有两个示例联系人)。列应该是键。我打算使用 csv 模块来 writerow(Fields)
,其中字段是字符串(键)列表,例如 Fields = [id, emails, phones, addresses, metadata, source]
不过,我真正需要的只是 csv 单列中的电子邮件。有没有办法只获取每个联系人的电子邮件?
更新:
正如@martineau 所指出的,我刚刚看到您可以排列几个值,您需要满足它。您可以在 for 循环
中使用 [].join()
将它们设为字符串
您可以使用 csv 包将其写入 csv。
import csv, json, sys
auth_key = "my auth key"
r = requests.get("https://www.wixapis.com/crm/v1/contacts", headers={"Authorization": auth_key})
print(r.status_code)
dict = r.json()
contacts_list = dict["contacts"]
output = csv.writer(sys.stdout)
#insert header(keys)
output.writerow(data[0].keys())
for i in contacts_list:
output.writerow(i.values())
最后可以打印验证output
具有一列的 CSV 文件基本上只是一个文本文件,每行一个项目,但是您可以使用 csv
模块来完成它,如果您真的想要,如下图。
我注释掉了 'python-requests' 内容并使用了一些样本输入进行测试。
test_data = {
"contacts": [
{
"id": "long id string 1",
"emails": [
{
"tag": "UNTAGGED",
"email": "sampleemail1@yahoo.com"
}
],
"phones": [],
"addresses": [
{
"tag": "UNTAGGED",
"countryCode": "US"
}
],
"metadata": {
"createdAt": "2020-07-08T22:41:07.135Z",
"updatedAt": "2020-07-08T22:42:19.327Z"
},
"source": {
"sourceType": "SITE_MEMBERS"
}
},
{
"id": "long id string 2",
"emails": [
{
"tag": "UNTAGGED",
"email": "sampleemail2@yahoo.com"
}
],
"phones": [],
"addresses": [],
"metadata": {
"createdAt": "2020-07-03T00:51:21.127Z",
"updatedAt": "2020-07-04T03:26:16.370Z"
},
"source": {
"sourceType": "SITE_MEMBERS"
}
}
]
}
import csv
import json
import requests
auth_key = "my auth key"
output_filename = 'whatever.csv'
#r = requests.get("https://www.wixapis.com/crm/v1/contacts", headers={"Authorization": auth_key})
#print(r.status_code)
#json_obj = r.json()
json_obj = test_data # FOR TESTING PURPOSES
contacts_list = json_obj["contacts"]
with open(output_filename, 'w', newline='') as outp:
writer = csv.writer(outp)
writer.writerow(['email']) # Write csv header.
for contact in contacts_list:
email = contact['emails'][0]['email'] # Get the first one.
writer.writerow([email])
print('email csv file written')
之后 whatever.csv
文件的内容:
email
sampleemail1@yahoo.com
sampleemail2@yahoo.com
我正在尝试使用他们的 API 端点 url 和 python 中的请求模块从我的 WIX 网站获取我的联系人列表。我完全被困住了。 到目前为止,这是我的代码:
import requests
auth_key = "my auth key"
r = requests.get("https://www.wixapis.com/crm/v1/contacts", headers={"Authorization": auth_key})
print(r.status_code)
dict = r.json()
contacts_list = dict["contacts"]
for i in contacts_list:
for key in i:
print(key, ':', i[key])
这是我得到的:
200
id : long id string 1
emails : [{'tag': 'UNTAGGED', 'email': 'sampleemail1@yahoo.com'}]
phones : []
addresses : [{'tag': 'UNTAGGED', 'countryCode': 'US'}]
metadata : {'createdAt': '2020-07-08T22:41:07.135Z', 'updatedAt': '2020-07-08T22:42:19.327Z'}
source : {'sourceType': 'SITE_MEMBERS'}
id : long id string 2
emails : [{'tag': 'UNTAGGED', 'email': 'sampleemail2@yahoo.com'}]
phones : []
addresses : []
metadata : {'createdAt': '2020-07-03T00:51:21.127Z', 'updatedAt': '2020-07-04T03:26:16.370Z'}
source : {'sourceType': 'SITE_MEMBERS'}
Process finished with exit code 0
每一行都是一个字符串。我需要 csv 的每一行都是一个新联系人(有两个示例联系人)。列应该是键。我打算使用 csv 模块来 writerow(Fields)
,其中字段是字符串(键)列表,例如 Fields = [id, emails, phones, addresses, metadata, source]
不过,我真正需要的只是 csv 单列中的电子邮件。有没有办法只获取每个联系人的电子邮件?
更新: 正如@martineau 所指出的,我刚刚看到您可以排列几个值,您需要满足它。您可以在 for 循环
中使用[].join()
将它们设为字符串
您可以使用 csv 包将其写入 csv。
import csv, json, sys
auth_key = "my auth key"
r = requests.get("https://www.wixapis.com/crm/v1/contacts", headers={"Authorization": auth_key})
print(r.status_code)
dict = r.json()
contacts_list = dict["contacts"]
output = csv.writer(sys.stdout)
#insert header(keys)
output.writerow(data[0].keys())
for i in contacts_list:
output.writerow(i.values())
最后可以打印验证output
具有一列的 CSV 文件基本上只是一个文本文件,每行一个项目,但是您可以使用 csv
模块来完成它,如果您真的想要,如下图。
我注释掉了 'python-requests' 内容并使用了一些样本输入进行测试。
test_data = {
"contacts": [
{
"id": "long id string 1",
"emails": [
{
"tag": "UNTAGGED",
"email": "sampleemail1@yahoo.com"
}
],
"phones": [],
"addresses": [
{
"tag": "UNTAGGED",
"countryCode": "US"
}
],
"metadata": {
"createdAt": "2020-07-08T22:41:07.135Z",
"updatedAt": "2020-07-08T22:42:19.327Z"
},
"source": {
"sourceType": "SITE_MEMBERS"
}
},
{
"id": "long id string 2",
"emails": [
{
"tag": "UNTAGGED",
"email": "sampleemail2@yahoo.com"
}
],
"phones": [],
"addresses": [],
"metadata": {
"createdAt": "2020-07-03T00:51:21.127Z",
"updatedAt": "2020-07-04T03:26:16.370Z"
},
"source": {
"sourceType": "SITE_MEMBERS"
}
}
]
}
import csv
import json
import requests
auth_key = "my auth key"
output_filename = 'whatever.csv'
#r = requests.get("https://www.wixapis.com/crm/v1/contacts", headers={"Authorization": auth_key})
#print(r.status_code)
#json_obj = r.json()
json_obj = test_data # FOR TESTING PURPOSES
contacts_list = json_obj["contacts"]
with open(output_filename, 'w', newline='') as outp:
writer = csv.writer(outp)
writer.writerow(['email']) # Write csv header.
for contact in contacts_list:
email = contact['emails'][0]['email'] # Get the first one.
writer.writerow([email])
print('email csv file written')
之后 whatever.csv
文件的内容:
email
sampleemail1@yahoo.com
sampleemail2@yahoo.com