Python3写入CSV时内容被拆分为单字符逗号分隔、尝试多种写法无效的问题求助
问题根因
csv.writer.writerow() 方法的入参要求为单元格值组成的列表/元组:方法会将传入序列中的每个元素单独写入一个CSV单元格,元素间自动插入指定分隔符。
你当前输出逐字符拆分的效果,本质是传入writerow()的参数为字符串类型——字符串本身是可迭代对象,迭代时会逐个返回单个字符,因此被CSV模块判定为“多个单字符组成的单元格序列”,最终输出G,E,R,E,N,T,E...这类拆分结果。
之前尝试无效的原因
- 调用
writer.writerow(row):若row为字符串类型,会直接触发逐字符拆分的问题,和当前错误逻辑完全一致 - 调用
writer.writerow(row[0]):若row为字符串,row[0]仅为第一个单字符'G',传入后依然会被作为单元素字符串迭代,仅输出单个字符单元格 - 调用
writer.writerow([row])无效果的场景:说明你的row并非纯字符串,而是提前被拆分为单字符元素的列表,此时列表的每个元素都是单字符,直接传入依然会逐字符写入单元格。
可直接落地的修正代码
在写入逻辑前增加一行类型校验,分场景适配:
# 先打印row的实际类型和内容,确认数据形态 print(f"row类型: {type(row)}, row内容: {row}") # 场景1:row是完整的岗位名字符串 if isinstance(row, str): # 把字符串包成单元素列表,即可整行作为一个单元格写入 writer.writerow([row]) # 场景2:row是单字符组成的列表 elif isinstance(row, list) and len(row) > 0 and isinstance(row[0], str) and len(row[0]) == 1: # 先把单字符拼接回完整字符串 full_row = "".join(row) writer.writerow([full_row])
注意:你原代码里的
writer.writerow(row.split())写法的问题:row.split()会把字符串按空白符拆成多个单词,比如把“GERENTE DE OPERACIONES (AGENCIA ADUANAL)”拆成4个独立单元格,并非你预期的“整行作为一个单元格”的效果,因此不适合当前导出需求。
可参考的核心知识点
- CSV模块的入参规则:任何要求传入“行数据”的方法,都不会自动识别字符串为单个单元格,必须手动将单条数据包裹为列表传入
- 字符串的可迭代特性:对字符串调用需要遍历序列的方法时,要注意遍历结果是单个字符而非完整字符串
- 去重逻辑的优化方向:当前使用
if row not in No_Duplicados的判断,在数据量较大时查询效率较低,可通过集合存储已出现的元素优化判断速度。
内容的提问来源于stack exchange,提问作者Lince
相关产品推荐
相关产品推荐

