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

来源:站长论坛作者:樱由罗头衔:网络博主
导读:本期聚焦于小伙伴创作的《Python如何优雅处理csv文件中混杂的引号和换行》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Python如何优雅处理csv文件中混杂的引号和换行》有用,将其分享出去将是对创作者最好的鼓励。

CSV文件作为一种通用的数据交换格式,在实际业务场景中经常被使用,但很多业务导出的CSV文件并不严格遵循RFC 4180标准,会出现字段多余引号、字段内容包含换行符却未正确转义的情况,使用常规的文件行读取方式无法正确解析这类文件。Python标准库的csv模块提供了完善的解析规则,能够优雅处理这些异常场景。

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

常规CSV读取的问题

如果直接使用open函数按行读取CSV文件,遇到字段内包含换行的情况会把一条数据拆分成多行,遇到多余引号也会导致分割错误。比如下面这样的CSV内容:

id,name,desc
1,"张三","这是一段
多行描述"
2,"李四","正常描述"

如果直接按行读取,会把第一条数据的两行当成两条记录,导致解析错误。

使用csv模块基础读取

csv模块的reader对象会自动处理引号包裹的字段,识别字段内的换行符,只要CSV文件的引号使用符合基本规则,就能正确解析。基础用法如下:

import csv

# 读取CSV文件,指定编码和分隔符
with open("test.csv", "r", encoding="utf-8") as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

上述代码会正确输出第一条记录的desc字段为包含换行的完整内容,不会错误拆分记录。

处理多余引号的场景

如果CSV文件中存在未转义的多余引号,比如字段内容里本身包含双引号却没有用两个双引号转义,或者字段开头结尾多了多余的引号,可以通过自定义引号处理逻辑解决。比如处理字段内单个双引号的情况,可以先读取原始行,对引号做预处理再交给csv解析:

import csv

def clean_quotes(line):
    # 简单处理字段内未转义的双引号,替换为两个双引号符合csv转义规则
    # 注意此逻辑仅适用于简单场景,复杂场景需要调整
    return line.replace('""', '"').replace('"', '""')

with open("test.csv", "r", encoding="utf-8") as f:
    lines = f.readlines()

processed_lines = [clean_quotes(line) for line in lines]

# 使用csv.reader解析处理后的内容
reader = csv.reader(processed_lines)
for row in reader:
    print(row)

自定义方言处理特殊格式

如果CSV文件的格式有特殊规则,比如使用单引号包裹字段,或者分隔符不是逗号,可以自定义csv方言来适配:

import csv

# 注册自定义方言,使用单引号作为引号字符,逗号作为分隔符
csv.register_dialect("custom_dialect",
    quotechar="'",
    delimiter=",",
    escapechar="\",
    doublequote=True,
    skipinitialspace=True
)

with open("test.csv", "r", encoding="utf-8") as f:
    reader = csv.reader(f, dialect="custom_dialect")
    for row in reader:
        print(row)

写入时正确处理引号和换行

如果需要把处理后的数据重新写入CSV,使用csv.writer可以自动处理字段内的引号和换行,不需要手动添加转义:

import csv

data = [
    ["id", "name", "desc"],
    [1, "张三", "这是一段n多行描述"],
    [2, "李四", "正常描述"带引号"]
]

with open("output.csv", "w", encoding="utf-8", newline="") as f:
    writer = csv.writer(f)
    writer.writerows(data)

上述代码写入的文件会正确用引号包裹包含换行和引号的字段,符合CSV标准格式,后续读取时也不会出现解析错误。

注意事项

  • 打开CSV文件时建议指定newline="",避免不同系统下的换行符转换问题。
  • 如果CSV文件编码不是utf-8,需要对应调整encoding参数,比如gbk编码的文件使用encoding="gbk"
  • 预处理引号的逻辑需要根据实际文件格式调整,避免误处理正常内容。
  • 对于格式极度混乱的CSV文件,可以先使用正则表达式做初步清洗,再交给csv模块解析。

Pythoncsv处理引号转义换行处理数据清洗修改时间:2026-06-24 02:48:31

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。