You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

生成含JSON列的CSV文件时,如何设置正确的引号格式?

问题

需要从数据集生成可导入SQL数据库的CSV文件,其中sizes和colors列需以JSON格式存储。使用Python的csv.DictWriter生成的CSV中,这两列的引号格式不符合要求,目标格式要求:

  • 列内容用单引号包裹(针对sizes)
  • 方括号内的数据用双引号包裹(针对两列的内部元素)

当前代码

with open("export.csv", "w", newline="") as csvfile:
    # Create a CSV writer using the field/column names
    writer = csv.DictWriter(
        csvfile,
        fieldnames=csv_fields,
    )
    # Write the header row (column names)
    writer.writeheader()
    for key in dict_products:
        print(dict_products[key])
        writer.writerow(dict_products[key])

当前生成的CSV内容

id,prodcategory_id,name,featured,image_1,image_2,image_3,image_4,colors,sizes,article_number,price,manufacturer_id
NULL,521,,0,521010000-1.jpg,,,,['1'],"['39', '41', '42', '43', '44', '45', '46']",521010000,6990,582
NULL,115,Women Court Sho,0,115130000-1.jpg,,,,['13'],"['36', '37', '38', '39', '40', '41']",115130000,4990,32

期望的CSV内容

id,prodcategory_id,name,featured,image_1,image_2,image_3,image_4,colors,sizes,article_number,price,manufacturer_id
NULL,521,,0,521010000-1.jpg,,,,["1"],'["39", "41", "42", "43", "44", "45", "46"]',521010000,6990,582
NULL,115,Women Court Sho,0,115130000-1.jpg,,,,["13"],'["36", "37", "38", "39", "40", "41"]',115130000,4990,32

解决方案

核心思路是借助json.dumps()生成标准JSON格式字符串(自动用双引号包裹元素),再手动处理sizes的外层单引号,同时关闭CSV writer的自动引号逻辑避免冲突。

修改后的代码:

import json
import csv

with open("export.csv", "w", newline="") as csvfile:
    writer = csv.DictWriter(
        csvfile,
        fieldnames=csv_fields,
        quoting=csv.QUOTE_NONE,  # 禁用自动添加双引号
        escapechar='\\'  # 防止字段内特殊字符破坏CSV结构
    )
    writer.writeheader()
    for product in dict_products.values():
        # 将colors列表转为标准JSON(双引号包裹元素)
        product['colors'] = json.dumps(product['colors'])
        # 将sizes转为标准JSON后,外层套单引号
        product['sizes'] = f"'{json.dumps(product['sizes'])}'"
        writer.writerow(product)

关键说明

  1. json.dumps():直接将Python列表转为符合JSON规范的字符串,自动用双引号包裹元素,完美匹配内部格式要求。
  2. quoting=csv.QUOTE_NONE:关闭CSV writer自动为字段添加双引号的行为,避免干扰手动设置的单引号格式。
  3. escapechar='\\':如果字段内容包含逗号等特殊字符,会自动添加转义符,确保CSV结构不被破坏。
  4. 外层单引号通过f-string直接拼接,确保sizes字段最终输出符合要求。

内容的提问来源于stack exchange,提问作者teccrow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 16:20:12