如何将 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 文件中?

如何将抓取的 Web 数据保存到多个 csv 文件中

如何将抓取数据保存到 CSV 文件中?

使用 JMeter,如何从 API 的响应正文中提取字符串并将其保存到 csv 文件?

如何将 Windows 窗体数据保存到 csv? [复制]