为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

隔江千里 2023-06-06 10:36:43
我是第一次这样做,到目前为止已经设置了一个简单的脚本来从 API 中获取 2 列数据数据通过了,我可以用打印命令看到它现在我正在尝试将它写入 CSV 并设置代码下面创建文件,但我不知道如何:1. 删除每个数据行之间的空行2. 为我想要的数据添加定界符 " "3. 如果 IP 等值是空的然后只显示“”我搜索并尝试了各种示例但只是出现错误我成功编写 CSV 的代码片段是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()#Open a File for Writingf = csv.writer(open(filename, "w", encoding='utf8'))# Write CSV Headerf.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 - en1HYDM002544581,192.168.1.8 - AirPort - en1 / 10.93.224.177 - GlobalProtect - gpd0HYDM002544580,10.93.80.101 - 以太网 - en0HYDM002543515,192.168.0.6 - AirPort - en0 / 10.91.224.58 - GlobalProtect - gpd0CHAM002369458,10.209.5.3 - 以太网 - en0CHAM002370188,192.168.0.148 - AirPort - en0 / 10.125.91.23 - GlobalProtect - gpd0MacBook 专业版,我尝试添加csv.writer(f, delimiter =' ',quotechar =',',quoting=csv.QUOTE_MINIMAL)在 f = csv.writer 行之后但会产生错误:TypeError: argument 1 must have a "write" method我确信它很简单,但就是找不到正确的解决方案来在我的代码中实现。任何帮助表示赞赏。另外,文件会自动关闭吗?一些示例建议使用类似 f.close() 的东西,但这会导致错误。我需要它吗?该文件似乎按原样创建得很好。
查看完整描述

1 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

我建议你使用 pandas 包来写.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


正如您在评论中所说,熊猫不是标准的 python 包。您可以简单地打开一个文件并向该文件写入行,其中包含您手动构建的行。例如:


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")


请注意," around value 是通过附加\".来构建的\n,以便在每个循环之后更改新行。


查看完整回答
反对 回复 2023-06-06
  • 1 回答
  • 0 关注
  • 223 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信