Python - 如何在 CSV 输出中添加分隔符和删除换行符?
Python - How to add delimiter and remove line breaks in CSV output?
我是第一次这样做,到目前为止已经设置了一个简单的脚本来从 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 输出如下所示:
Computer_Name,IP_Addresses
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 - Ethernet - en0
HYDM002543515,192.168.0.6 - AirPort - en0 / 10.91.224.58 -
GlobalProtect - gpd0
CHAM002369458,10.209.5.3 - Ethernet - en0
CHAM002370188,192.168.0.148 - AirPort - en0 / 10.125.91.23 -
GlobalProtect - gpd0
MacBook-Pro,
我试过添加
csv.writer(f, delimiter =' ',quotechar =',',quoting=csv.QUOTE_MINIMAL)
在 f = csv.writer 行之后但会产生错误:
TypeError: argument 1 must have a "write" method
我确信它很简单,但无法在我的代码中找到正确的解决方案来实现。感谢任何帮助。
另外,文件会自动关闭吗?一些示例建议使用 f.close() 之类的东西,但这会导致错误。我需要它吗?该文件似乎按原样创建得很好。
建议大家使用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)
如果要用" "
分隔值,可以在输出.csv
文件的最后一行设置sep=" "
。但是,我建议使用 ,
作为分隔符,因为它是一个通用标准。还可以为 DataFrame.to_csv() 方法设置更多配置,您可以查看官方文档。 https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_csv.html
正如您在评论中所说,pandas 不是标准的 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 值是通过附加 \"
构建的。\n
以在每次循环后更改新行。
我是第一次这样做,到目前为止已经设置了一个简单的脚本来从 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 输出如下所示:
Computer_Name,IP_Addresses
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 - Ethernet - en0
HYDM002543515,192.168.0.6 - AirPort - en0 / 10.91.224.58 - GlobalProtect - gpd0
CHAM002369458,10.209.5.3 - Ethernet - en0
CHAM002370188,192.168.0.148 - AirPort - en0 / 10.125.91.23 - GlobalProtect - gpd0
MacBook-Pro,
我试过添加
csv.writer(f, delimiter =' ',quotechar =',',quoting=csv.QUOTE_MINIMAL)
在 f = csv.writer 行之后但会产生错误:
TypeError: argument 1 must have a "write" method
我确信它很简单,但无法在我的代码中找到正确的解决方案来实现。感谢任何帮助。
另外,文件会自动关闭吗?一些示例建议使用 f.close() 之类的东西,但这会导致错误。我需要它吗?该文件似乎按原样创建得很好。
建议大家使用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)
如果要用" "
分隔值,可以在输出.csv
文件的最后一行设置sep=" "
。但是,我建议使用 ,
作为分隔符,因为它是一个通用标准。还可以为 DataFrame.to_csv() 方法设置更多配置,您可以查看官方文档。 https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_csv.html
正如您在评论中所说,pandas 不是标准的 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 值是通过附加 \"
构建的。\n
以在每次循环后更改新行。