Python - 如何在 CSV 输出中添加分隔符和删除换行符?

我是第一次这样做,到目前为止已经设置了一个简单的脚本来从 API 中获取 2 列数据数据
通过了,我可以用打印命令看到它
现在我正在尝试将它写入 CSV 并设置代码下面创建文件,但我不知道如何:

1. 删除每个数据行之间的空行
2. 为我想要的数据添加定界符 " "
3. 如果 IP 等值是空的然后只显示“”

我搜索并尝试了各种示例但只是出现错误

我成功编写 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 输出如下所示:



计算机名称、IP_地址


HYDM002543514,


HYDM002543513,10.93.96.144 - AirPort - en1


HYDM002544581,192.168.1.8 - AirPort - en1 / 10.93.224.177 - GlobalProtect - gpd0


HYDM002544580,10.93.80.101 - 以太网 - en0


HYDM002543515,192.168.0.6 - AirPort - en0 / 10.91.224.58 - GlobalProtect - gpd0


CHAM002369458,10.209.5.3 - 以太网 - en0


CHAM002370188,192.168.0.148 - AirPort - en0 / 10.125.91.23 - GlobalProtect - gpd0


MacBook 专业版,


我尝试添加


csv.writer(f, delimiter =' ',quotechar =',',quoting=csv.QUOTE_MINIMAL)

在 f = csv.writer 行之后但会产生错误:

TypeError: argument 1 must have a "write" method


我确信它很简单,但就是找不到正确的解决方案来在我的代码中实现。任何帮助表示赞赏。


另外,文件会自动关闭吗?一些示例建议使用类似 f.close() 的东西,但这会导致错误。我需要它吗?该文件似乎按原样创建得很好。


隔江千里
浏览 238回答 1
1回答

慕尼黑的夜晚无繁华

我建议你使用 pandas 包来写.csv文件,这是一个最常用的数据分析包。对于您的问题:import requestsimport csvimport jsonimport pandas# Make an API call and store responseurl = '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 variableresponse_dict = r.json()#collect data to build pandas.DataFramedata = []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正如您在评论中所说,熊猫不是标准的 python 包。您可以简单地打开一个文件并向该文件写入行,其中包含您手动构建的行。例如:import requestsimport csvimport json# Make an API call and store responseurl = '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 variableresponse_dict = r.json()r = requests.get(url, headers=headers, auth=('User','PWD'))print(f"Status code: {r.status_code}")#Store API response in a variableresponse_dict = r.json()#Open a File for Writingf = 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")请注意," around value 是通过附加\".来构建的\n,以便在每个循环之后更改新行。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python