Python CSV Writer如何仅转义分隔符而不转义转义字符
解决Python CSV Writer不转义转义符本身的问题
要解决这个问题,核心是绕过csv模块默认的转义机制,手动完成分隔符转义,同时让模块不对转义字符本身做额外处理:
- 手动预处理字段:遍历每个字段,把其中的分隔符
|替换成!|——这正是Teradata认可的转义格式。 - 配置CSV Writer参数:关闭自动转义和引号功能,避免模块对
!进行多余转义。
直接上代码示例:
import csv # 模拟从JSON读取的原始数据 raw_data = [ ["user|123", "comment!with!exclamations", "normal|mixed!content"] ] with open('teradata_output.csv', 'w', newline='', encoding='utf-8') as outfile: # 配置分隔符为|,关闭引号和自动转义 writer = csv.writer(outfile, delimiter='|', quoting=csv.QUOTE_NONE) # 预处理每个字段,仅转义分隔符| processed_rows = [ [field.replace('|', '!|') for field in row] for row in raw_data ] writer.writerows(processed_rows)
生成的CSV内容如下:
user!|123|comment!with!exclamations|normal!|mixed!content
Teradata会正确识别!|为转义后的分隔符,而字段中原本的!会被当作普通数据保留,完全符合需求。
之所以不用csv模块自带的escapechar参数,是因为该模块的设计逻辑会自动转义转义字符本身(比如设置escapechar='!'时,字段里的!会被转成!!),这和Teradata的规则冲突,手动预处理是最直接简便的方案。
内容的提问来源于stack exchange,提问作者moons
相关产品推荐
相关产品推荐

