python - 将行数据从 CSV 传递到 API,并将结果附加到空的 CSV 列
问题描述
我正在尝试用 Python 编写代码,该代码将从CSV
文件中获取行并将它们传递给 API 调用。如果返回成功,我想追加到我添加yes
的match
列。如果没有返回数据,则no
改为追加。
这是当前返回第一行匹配结果的代码:
headers = {
'Authorization': {token},
'Content-Type': 'application/json; charset=utf-8',
}
data = '[{
"name": "Company 1",
"email_domain": "email1.com",
"url": "https://www.url1.com"
}]'
response = requests.post(
'https://{base_url}/api/match',
headers=headers,
data=data
)
如果我手动将数据传递给 API 调用,则此代码适用于每一行,但由于有数百行,我希望能够遍历每一行,通过 API 调用传递它们,然后追加yes
或no
到match
我创建的列。我的强项不是编写for
循环,我相信这是解决这个问题的方法,但我会喜欢任何做过类似事情的人的意见。
解决方案
假设您有一个src.csv
包含以下内容的文件:
company_id,company_name,url,company_domain,match
1,Company 1,https://www.url1.com,email1.com,
2,Company 2,https://www.url2.com,email2.io,
3,Company 3,https://www.url3.com,email3.com,
以下代码片段将读取它并创建一个新tgt.csv
文件,其中match
每行的列设置为yes
or no
,基于结果request.post()
(您需要根据您的逻辑对其进行调整):
import csv
import json
token = 'Your API Token Here'
base_url = 'https://some.base.url'
headers = {
'Authorization': token,
'Content-Type': 'application/json; charset=utf-8',
}
with open('src.csv') as src, open('tgt.csv', 'w', newline='') as tgt:
reader = csv.reader(src)
writer = csv.writer(tgt)
columns = next(reader)
writer.writerow(columns)
for company_id, company_name, url, company_domain, match in reader:
data = json.dumps([{
'name': company_name,
'email_domain': company_domain,
'url': url
}])
response = requests.post(
f'{base_url}/api/match',
headers=headers,
data=data
)
if response.ok:
match = 'yes'
else:
match = 'no'
writer.writerow((company_id, company_name, url, company_domain, match))
推荐阅读
- qstandarditemmodel - 如何避免QTableView中垂直滚动条占位符的丑陋空白?
- go - Unexpected Addition Behaviour of two Uint64
- javascript - 页面加载后添加活动类
- c# - Unity 对象引用未设置为对象 unity 的实例
- flutter - 如何在 Flutter 中实现进度指示器
- c++ - 当我使用需要计算数组单元格地址的模板时,奇怪的 C++ 行为
- html - 如何让我的 div 类“一个”位于页面的左侧?
- java - 如何使用 BottomNavigationView 隐藏 TabLayout
- javascript - Sequelize 找不到变量
- python - 完成这些任务的最快方法是什么?