我是第一次这样做,到目前为止,我已经设置了一个简单的脚本来从API中获取2列数据。
数据通过,我可以通过print命令看到它。
现在,我试图将它写到CSV,并设置下面的代码来创建文件,但我不知道如何:
“。
我搜索并尝试了各种各样的例子,但只是得到错误。
我成功地编写CSV的代码片段是
import requests
import csv
import json
# Make an API call and store response
url = 'https://api-url-goes-here.com'
filename = "test.csv"
headers = {
'accept': 'application/json',
}
r = requests.get(url, headers=headers, auth=('User','PWD'))
print(f"Status code: {r.status_code}")
#Store API response in a variable
response_dict = r.json()
#Open a File for Writing
f = csv.writer(open(filename, "w", encoding='utf8'))
# Write CSV Header
f.writerow(["Computer_Name", "IP_Addresses"])
for computer in response_dict["advanced_computer_search"]["computers"]:
f.writerow([computer["Computer_Name"],computer["IP_Addresses"]])
CSV输出如下所示:
Computer_Name,IP_Addresses
HYDM002543514,
HYDM002543513,10.93.96.144 002543513 10.93.96.144- AirPort - en1
gpd0 002544581,192.168.1.8- AirPort - en1 / 10.93.224.177 - GlobalProtect -gpd0
HYDM002544580,10.93.80.101 002544580,10.93.80.101-以太网- en0
gpd0 002543515 192.168.0.6- AirPort - en0 / 10.91.224.58 - GlobalProtect -gpd0
CHAM002369458,10.209.5.3 002369458 10.209.5.3-以太网- en0
AirPort - en0 / 10.125.91.23 - GlobalProtect - gpd0
MacBook-Pro,
我试着添加
csv.writer(f, delimiter =' ',quotechar =',',quoting=csv.QUOTE_MINIMAL)
在f= csv.writer行之后,但是这会产生一个错误:
TypeError:参数1必须有一个“写”方法
我确信这很简单,但无法在我的代码中找到实现的正确解决方案。任何帮助都是非常感谢的。
另外,文件会自动关闭吗?一些示例建议使用类似f.close()之类的东西,但这会导致错误。我需要它吗?该文件似乎创建良好,就像现在一样。
发布于 2020-08-20 05:02:05
我建议您使用熊猫包来编写.csv
文件,这是一个用于数据分析的最常用的包。
对于你的问题:
import requests
import csv
import json
import pandas
# Make an API call and store response
url = 'https://api-url-goes-here.com'
filename = "test.csv"
headers = {
'accept': 'application/json',
}
r = requests.get(url, headers=headers, auth=('User','PWD'))
print(f"Status code: {r.status_code}")
#Store API response in a variable
response_dict = r.json()
#collect data to build pandas.DataFrame
data = []
for computer in response_dict["advanced_computer_search"]["computers"]:
# filter blank line
if computer["Computer_Name"] or computer["IP_Addresses"]:
data.append({"Computer_Name":computer["Computer_Name"],"IP_Addresses":computer["IP_Addresses"]})
pandas.DataFrame(data=data).to_csv(filename, index=False)
如果要使用" "
分隔值,可以在最后一行中设置sep=" "
输出.csv
文件。但是,我建议使用,
作为分隔符,因为它是一个通用的标准。此外,还可以为DataFrame.to_csv()方法设置更多的信任,您可以检查官方文档。https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_csv.html
正如你在评论中所说的,熊猫不是一个标准的蟒蛇包。您只需打开一个文件并将行写入该文件,就可以手动构建行。例如:
import requests
import csv
import json
# Make an API call and store response
url = 'https://api-url-goes-here.com'
filename = "test.csv"
headers = {
'accept': 'application/json',
}
r = requests.get(url, headers=headers, auth=('User','PWD'))
print(f"Status code: {r.status_code}")
#Store API response in a variable
response_dict = r.json()
r = requests.get(url, headers=headers, auth=('User','PWD'))
print(f"Status code: {r.status_code}")
#Store API response in a variable
response_dict = r.json()
#Open a File for Writing
f = csv.writer(open(filename, "w", encoding='utf8'))
with open(filename, mode='w') as f:
# Write CSV Header
f.write("Computer_Name,"+"IP_Addresses"+"\n")
for computer in response_dict["advanced_computer_search"]["computers"]:
# filter blank line
if computer["Computer_Name"] or computer["IP_Addresses"]:
f.write("\""+computer["Computer_Name"]+"\","+"\""+computer["IP_Addresses"]+"\"\n")
请注意,“通过在每个循环后追加\"
. \n
来更改新行来生成\n
。
https://stackoverflow.com/questions/63497897
复制相似问题