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

Python:解决写入CSV时字段被自动添加引号的问题

解决CSV保存/加载系统的字段处理问题

哎,你这里肯定是笔误啦——你贴出来的预期结果和实际结果完全一模一样,但结合你的需求描述,我猜你真正遇到的问题应该是CSV写入时自动给包含逗号的字段加了引号,或者读取时无法把|[0, 1, 1]|作为单个完整字段解析?别担心,咱们一步步来解决:

先修正代码里的语法小错误

你当前的写入代码有个语法问题:writerow()需要接收一个列表作为参数,但你的代码多写了一个闭合方括号,正确写法应该是:

# 错误写法
# writer.writerow(name, type, slaveNumber, '|' + str(fix.code) + '|'])
# 正确写法:把所有字段放进一个列表里
writer.writerow([name, type, slaveNumber, '|' + str(fix.code) + '|'])

核心问题:让|[0, 1, 1]|作为单个CSV字段存储

你的需求是把带逗号的列表字符串作为单个字段保存,而CSV默认用逗号做分隔符,所以会触发自动加引号的规范行为,或者读取时拆分字段。这里给你几个可行的方案:

方案1:换一个不冲突的CSV分隔符

如果你完全控制这个CSV文件的读写流程,最简单的方法是换个不会和字段内容冲突的分隔符,比如分号;:

import csv
# 写入时指定分隔符
with open('save_data.csv', 'w', newline='') as f:
    writer = csv.writer(f, delimiter=';')
    writer.writerow([name, type, slaveNumber, '|' + str(fix.code) + '|'])

# 读取时也要用同样的分隔符
with open('save_data.csv', 'r') as f:
    reader = csv.reader(f, delimiter=';')
    for row in reader:
        # row[3]就是完整的`|[0, 1, 1]|`字段
        raw_code = row[3].strip('|')
        # 把字符串转回列表(推荐用安全的ast.literal_eval,别用eval)
        import ast
        code_list = ast.literal_eval(raw_code)

方案2:保留CSV规范的引号,读取时正常解析

如果必须用逗号做分隔符,其实标准CSV读取器会自动识别带引号的字段,直接读取就好:

# 写入用默认配置即可(会自动给带逗号的字段加引号)
writer.writerow([name, type, slaveNumber, '|' + str(fix.code) + '|'])

# 读取时直接获取完整字段
with open('save_data.csv', 'r') as f:
    reader = csv.reader(f)
    for row in reader:
        # row[3]会自动是`|[0, 1, 1]|`,不会被拆分成多个字段
        raw_code = row[3].strip('|')
        # 安全转列表
        import ast
        code_list = ast.literal_eval(raw_code)

方案3:用JSON序列化代替字符串转列表(更可靠)

用str()直接转列表有格式风险,比如列表里有字符串元素时会出问题。推荐用JSON来序列化和反序列化:

import csv
import json
# 写入时
code_str = '|' + json.dumps(fix.code) + '|'
writer.writerow([name, type, slaveNumber, code_str])

# 读取时
with open('save_data.csv', 'r') as f:
    reader = csv.reader(f)
    for row in reader:
        raw_code = row[3].strip('|')
        code_list = json.loads(raw_code)

这种方式比ast.literal_eval()更安全,还能处理嵌套列表、字典等复杂数据结构。

不推荐:禁用CSV的引号功能

除非你能100%保证所有其他字段里绝对不会出现逗号,否则不要禁用引号——这会导致字段被错误拆分:

# 不推荐的写法
writer = csv.writer(f, quoting=csv.QUOTE_NONE)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:23:33