如何将 API 数据保存到 csv 文件中?另外如何修复回溯错误?
Posted
技术标签:
【中文标题】如何将 API 数据保存到 csv 文件中?另外如何修复回溯错误?【英文标题】:How do I save API data into a csv file? Also how do I fix a traceback error? 【发布时间】:2021-05-11 20:07:01 【问题描述】:这是我的代码的一部分。它成功地进行 API 调用并从 API 端点接收数据。我正在尝试将此 JSON 数据保存到 csv 文件中,但我不确定如何。 API 数据也打印为 unicode 而不是字符串 - 我该如何解决?
我试过这些代码行:
试验一:
with open('data.json', 'w', encoding = 'utf-8') as file:
json.dump(response, file, ensure_ascii=False, indent=4)
试验 2:
data = response.text
file_csv = open("File.csv", "w")
writer = csv.writer(file_csv, delimiter = ' ')
for rows in basketball_data.split('\n'):
writer.writerow(rows)
试验 3:
我尝试使用 Pandas,但效果不佳。有什么建议吗?
以下代码用于获取有效的 API 数据。
basketball_data = " "
URL = "https://api.sportsdata.io/v3/nba/stats/json/PlayerGameStatsByDate/2020-FEB7" #API
# endpoint
# Dictionary to map HTTP authenticator and API key
Headers = 'Ocp-Apim-Subscription-Key': 'd22e84f5c1fa4f4ab47bf1419bd94221', 'accept':
"application/json", 'accept': "text/csv"
response = requests.get(url = URL , headers = Headers) #get request parameters to
print(response.status_code) #Status code tells us if API call is successful
print(response.json()) #JSON object is returned
【问题讨论】:
df = pd.DataFrame(response.json()); df.to_csv(file, index=False)
,可以先将json转成dataframe。
“如何将 API 数据保存到 csv 文件中?” “我正在尝试将这些数据保存到 json 文件中”是吗?
哎呀,我的意思是我想将 JSON 数据保存到 csv 文件中。
@Ferris 所以 ; 之前的代码将 JSON 数据插入到数据框中。分号后面的代码会将数据从数据框中读取到 csv 文件中。那是对的吗?另外,我将如何定义文件变量 - 我收到此错误:UnboundLocalError: local variable 'file' referenced before assignment
有什么理由需要 CSV?我建议将 pickle 作为磁盘存储格式
【参考方案1】:
试试这个:
import pandas as pd
import requests
url = "https://api.sportsdata.io/v3/nba/stats/json/PlayerGameStatsByDate/2020-FEB7"
headers =
"Ocp-ApimKey": ";wld4221",
"accept": "application/json",
data = requests.get(url=url, headers=headers).json()
pd.DataFrame(data).to_csv("basketball_data.csv", index=False)
输出:
【讨论】:
我试过了。我遇到了运行时错误:UnicodeEncodeError: 'ascii' codec can't encode character u'\u0161' in position 12: ordinal not in range(128).很遗憾,API返回的响应中包含unicode,如何去掉unicode?span> 你没有删除 unicode。你解码它。您确定您访问的网址与问题中的网址相同吗?我无法重现您的错误。 api.sportsdata.io/v3/nba/stats/json/PlayerSeasonStats/2021。 (这是我正在使用的更新链接) 另外,数据的数据类型是列表。这会使解码有什么不同吗? 不过,在我的情况下,更新链接并没有太大变化。该代码有效,我能够以 .csv 格式获取数据。没有任何错误。不,该列表与解码没有任何关系。【参考方案2】:这是 pandas 文档给出的解决方案之一:
import requests
import pandas as pd
basketball_data = " "
URL = "https://api.sportsdata.io/v3/nba/stats/json/PlayerGameStatsByDate/2020-FEB7" #API
Headers = 'Ocp-Apim-Subscription-Key': 'd22e84f5c1fa4f4ab47bf1419bd94221', 'accept':
"application/json", 'accept': "text/csv"
response = requests.get(url = URL , headers = Headers) #get request parameters to
print(response.status_code) #Status code tells us if API call is successful
print(response.json()) #JSON object is returned
df = pd.json_normalize(response.json())
df.to_csv("data1.csv")
【讨论】:
以上是关于如何将 API 数据保存到 csv 文件中?另外如何修复回溯错误?的主要内容,如果未能解决你的问题,请参考以下文章
Python:如何将csv文件某一列中所有相同元素的行分别另外以要求的命名格式保存
如何读取从 API 检索到的 JSON 并将其保存到 CSV 文件中?