如何去除CSV列内容内的换行符以适配Pandas处理?
解决Teradata导出CSV字段内换行导致Pandas读取异常的问题
一、导出时直接避免字段内换行
- 修改SQL查询,把字段内的换行符替换成空格:
Teradata中换行符对应CHR(10),直接在SELECT语句里替换目标字段即可,示例:
这样导出的CSV里,字段内的换行直接转为空格,从根源解决问题。SELECT REPLACE(TEXT, CHR(10), ' ') AS TEXT, DATE FROM your_table_name; - 检查SQL Assistant导出设置:部分版本的工具里可以查找导出选项,看是否有“处理字段内换行”的相关配置,但用SQL替换是最稳妥的方案。
二、预处理已生成的CSV文件
如果已经导出了有问题的CSV,用Python脚本处理,仅移除字段内的换行,保留行分隔符:
import re # 读取原始文件内容 with open('input.csv', 'r', encoding='utf-8') as f: raw_content = f.read() # 用正则匹配单引号包裹范围内的换行,替换为空格 fixed_content = re.sub(r"(?<=')[^']*\n[^']*(?=')", lambda match: match.group().replace('\n', ' '), raw_content) # 写入处理后的文件 with open('output.csv', 'w', encoding='utf-8') as f: f.write(fixed_content)
该正则只会替换单引号包裹区域内的换行,不会改动行与行之间的分隔换行。
三、直接让Pandas正确读取带字段内换行的CSV
Pandas本身支持识别引号包裹的字段内换行,只需正确设置参数:
import pandas as pd # 读取文件,指定单引号为字段包裹符,使用python引擎处理复杂格式 df = pd.read_csv( 'your_file.csv', sep=';', quotechar="'", engine='python' ) # 若需要将字段内换行转为空格,执行以下处理 df['TEXT'] = df['TEXT'].str.replace('\n', ' ') # 保存处理后的CSV文件 df.to_csv('fixed_file.csv', sep=';', quotechar="'", index=False)
无需修改原始文件,直接让Pandas正确解析内容,之后按需调整字段格式即可。
内容的提问来源于stack exchange,提问作者pedritoanonimo
相关产品推荐
相关产品推荐

