python-3.x - Python3 在 CSV 输出中生成双引号字符串
问题描述
我正在使用 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])
推荐阅读
- javascript - 使用数据(Json),为数组中的每个对象创建新元素、行和列
- android - 为什么文本没有延伸到 textview 的整个宽度?
- javascript - 为什么在 React 中将它们传递给路由器中的组件时不需要 {...props}?
- javascript - 将 Chrome 扩展数据从 Chrome 本地存储迁移到 MongoDB
- dart - Dart Flutter:为什么 Stream Sink 使用 getter 而不是 setter?
- java - 在不升级旧的现有依赖项的情况下修复 Maven 依赖项冲突
- sql - 如何重写我的 CASE 表达式以避免此特定错误消息?
- python-3.x - urllib 和“HTTPError:错误请求”
- flutter - modal_progress_hud flutter 包无法安装
- reactjs - 汇总来自 API/div 的信息