Python3 在 CSV 输出中生成双引号字符串
Python3 producing double quoted string in CSV output
我正在使用 Python3 访问生成 json 输出的 EST/API。我必须从 API 调用中抓取一些数据并生成一个简单的 .csv 文件供另一个进程使用。 CSV 文件不应包含任何引号字符串。
所需的 csv 输出是这样的行(基本上是设备名称、IP 地址和票证#):
devicename.domain,1.1.1.1,ticket_number
但是我在我的 csv 文件中得到了这个:
"devicename.domain,1.1.1.1,ticket_number"
我相信双引号来自我生成列表元素的方式,但我似乎无法摆脱它们,无论是在列表构造中还是在 csv 输出中。我尝试了各种 'quoting=csv.QUOTE_NONE' ,但我无法摆脱 CSV 输出文件中的引号。很确定问题出在我首先格式化列表的方式上,但我碰壁了。
这是我的代码:
csv_rows = []
domain="mydomain.com"
ticket="ticket"
# create a nested list element that contains the data scraped from json
for switch in switches:
switchname = switch["switch-name"]
switchip = switch["ip"]
csv_rows.append([f"{switchname}.{domain},{switchip},{ticket}"])
filename = f"{ticket}.csv"
with open(filename, 'w') as csvfile:
# creating a csv writer object
csvwriter = csv.writer(csvfile)
# writing the data rows
csvwriter.writerows(csv_rows)
引号是由 CSV 编写器添加的,因为它认为您希望将所有这些内容都放在一个列中,因此它用引号将整个字符串括起来,以转义您输入的逗号。
通过自己进行字符串格式化和添加逗号,您正在复制 CSV 模块的功能,因此会出现不需要的行为。它需要一个迭代器,例如每一行的列表,然后它会添加列分隔符并自己引用。试试这个:
csv_rows.append([f"{switchname}.{domain}",switchip,ticket])
我正在使用 Python3 访问生成 json 输出的 EST/API。我必须从 API 调用中抓取一些数据并生成一个简单的 .csv 文件供另一个进程使用。 CSV 文件不应包含任何引号字符串。
所需的 csv 输出是这样的行(基本上是设备名称、IP 地址和票证#):
devicename.domain,1.1.1.1,ticket_number
但是我在我的 csv 文件中得到了这个:
"devicename.domain,1.1.1.1,ticket_number"
我相信双引号来自我生成列表元素的方式,但我似乎无法摆脱它们,无论是在列表构造中还是在 csv 输出中。我尝试了各种 'quoting=csv.QUOTE_NONE' ,但我无法摆脱 CSV 输出文件中的引号。很确定问题出在我首先格式化列表的方式上,但我碰壁了。
这是我的代码:
csv_rows = []
domain="mydomain.com"
ticket="ticket"
# create a nested list element that contains the data scraped from json
for switch in switches:
switchname = switch["switch-name"]
switchip = switch["ip"]
csv_rows.append([f"{switchname}.{domain},{switchip},{ticket}"])
filename = f"{ticket}.csv"
with open(filename, 'w') as csvfile:
# creating a csv writer object
csvwriter = csv.writer(csvfile)
# writing the data rows
csvwriter.writerows(csv_rows)
引号是由 CSV 编写器添加的,因为它认为您希望将所有这些内容都放在一个列中,因此它用引号将整个字符串括起来,以转义您输入的逗号。
通过自己进行字符串格式化和添加逗号,您正在复制 CSV 模块的功能,因此会出现不需要的行为。它需要一个迭代器,例如每一行的列表,然后它会添加列分隔符并自己引用。试试这个:
csv_rows.append([f"{switchname}.{domain}",switchip,ticket])