0

0

Python 如何优雅处理 csv 文件中混杂的引号和换行

舞夢輝影

舞夢輝影

发布时间:2026-01-17 19:14:51

|

364人浏览过

|

来源于php中文网

原创

应使用Python内置csv模块配合newline=''和quoting=csv.QUOTE_MINIMAL,或预处理修复引号嵌套,或改用pandas.read_csv并设置quoting=csv.QUOTE_ALL与lineterminator参数。

python 如何优雅处理 csv 文件中混杂的引号和换行

如果您在使用 Python 处理 CSV 文件时遇到字段内包含英文双引号、单引号或跨行换行符(如 Windows 的 \r\n 或 Unix 的 \n)导致 csv.reader 解析失败、字段错位或 ValueError 报错,则很可能是 CSV 解析器未能正确识别被引号包裹的多行字段。以下是解决此问题的步骤:

一、使用内置 csv 模块配合正确 quoting 参数

Python 内置 csv 模块支持 RFC 4180 标准,当字段被双引号包围且内部含换行符或引号时,只要设置正确的 quoting 和 escapechar,即可自动处理。关键在于启用 QUOTE_ALL 或 QUOTE_MINIMAL 并确保 quotechar 与文件实际一致。

1、以文本模式打开 CSV 文件,指定 newline='' 参数防止 universal newlines 干扰内部换行解析。

2、初始化 csv.reader 时传入 quoting=csv.QUOTE_MINIMAL,该模式会将含逗号、换行符或 quotechar 的字段自动加引号包裹。

立即学习Python免费学习笔记(深入)”;

3、若原始文件中字段使用双引号包裹且内部双引号以两个双引号表示(如 "He said ""Hi""."),则无需额外 escapechar,csv 模块默认识别该转义方式。

4、逐行迭代 reader 对象,每行返回已正确分割的字符串列表,内部换行符保留在对应字段字符串中,不会中断行读取。

二、预处理原始字节流并修复引号嵌套

当 CSV 文件存在不规范引号(如单引号混用、未闭合引号、引号内含未转义换行)时,标准 csv.reader 可能提前终止。此时可先对原始内容做轻量级清洗:定位未闭合引号段,将其中非法换行替换为占位符,再交由 csv 模块解析,最后还原。

1、用 open(file, 'rb') 读取全部字节,避免文本编码干扰原始引号位置。

2、扫描字节流,记录双引号出现位置,检测奇数次引号后是否紧随换行符(b'\r\n' 或 b'\n')且后续无匹配闭合引号。

3、对每个疑似未闭合字段区间,将其中的 b'\n' 替换为 b'\\n'(ASCII 字节序列),保持字段完整性。

4、将修复后的字节流解码为字符串(指定 encoding='utf-8',errors='replace'),再送入 csv.StringIO 构造可读对象。

5、使用 csv.reader 解析该 StringIO 对象,并在获取字段后将 '\n' 替换回 '\n'。

Bing图像创建器
Bing图像创建器

必应出品基于DALL·E的AI绘图工具

下载

三、切换至 pandas.read_csv 并启用 robust 参数组合

pandas 的 read_csv 函数在底层调用 C 解析器,对混合引号和换行具有更强容错能力,尤其当设置 engine='python' 时会启用纯 Python 解析器,支持更灵活的 quoting 行为和行继续逻辑。

1、导入 pandas 并调用 pd.read_csv(),传入 filepath_or_buffer 参数指向目标文件路径。

2、显式指定 quoting=csv.QUOTE_ALL,强制所有字段视为被引号包裹,使内部换行合法化。

3、添加参数 lineterminator='\n',避免 Windows 行尾 \r\n 被误判为字段内字符;若文件含 \r\n 换行且字段内也有 \r\n,可改用 lineterminator=None 让 pandas 自动检测。

4、设置 error_bad_lines=False(pandas

5、加载后检查 DataFrame 中 object 类型列是否含预期换行符,确认字段未被截断。

四、使用 csvkit 工具链预验证与标准化

csvkit 是专为处理“脏 CSV”设计的命令行工具集,其 in2csv 命令可将非标准 CSV 转换为 RFC 兼容格式,消除引号歧义与换行冲突,再交由 Python 安全读取。

1、通过 pip install csvkit 安装工具包。

2、执行 in2csv --no-inference input.csv > normalized.csv,该命令自动识别引号规则、合并跨行字段、转义内部引号。

3、验证 normalized.csv 是否仍保留原始语义:用 head -n 5 normalized.csv 查看前五行,确认多行字段已折叠为单行且引号成对。

4、在 Python 中用标准 csv.reader 打开 normalized.csv,不再需特殊参数,quoting=csv.QUOTE_MINIMAL 即可稳定工作。

5、若原始文件无 BOM 但含中文,可在 in2csv 后追加 --encoding utf-8-sig 确保输出带签名,避免 Python 读取时解码错误。

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

758

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

639

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

761

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

618

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1264

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

548

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

579

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

708

2023.08.11

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

40

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 2.8万人学习

Django 教程
Django 教程

共28课时 | 3.2万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号