Python 导出中文 CSV 的三个细节

举报
yd_278092557 发表于 2026/10/31 23:53:49 2026/10/31
【摘要】 使用 csv.DictWriter 导出中文数据,处理编码、换行和空值,保留明确的字段顺序。

CSV 看起来只是逗号分隔文本,但直接拼接字符串容易漏掉带逗号、引号或换行的字段。中文导出还要考虑接收方使用什么程序打开。使用标准库 csv,可以把转义和列顺序交给专门的写入器,只保留业务上的字段转换。

明确编码、换行和字段顺序

import csv

rows = [
    {"名称": "开发工具", "数量": 3, "备注": "含中文,含逗号"},
    {"名称": "示例数据", "数量": 0, "备注": None},
]
fields = ["名称", "数量", "备注"]
with open("report.csv", "w", encoding="utf-8-sig", newline="") as file:
    writer = csv.DictWriter(file, fieldnames=fields)
    writer.writeheader()
    for row in rows:
        clean = {key: "" if row.get(key) is None else row[key]
                 for key in fields}
        writer.writerow(clean)

newline="" 让 csv 模块按自己的规则处理换行,避免 Windows 上出现额外空行。utf-8-sig 会写入 UTF-8 的字节顺序标记,一些表格软件更容易识别中文。若文件用于机器接口,则先确认对方是否接受这个标记,普通 utf-8 也可能更合适。

空值和表格解释是两回事

示例只把 None 转为空串,保留了数量 0;不能用 value or "",否则零和 False 也会丢失。空串与缺失值在 CSV 中不天然可区分,需要接收方事先约定。字段里的逗号和引号由 writer 处理,不需要手工增加引号。

如果导出的内容来自外部输入,表格软件可能把以等号等字符开头的单元格解释成公式。CSV 的正确转义并不改变这种解释;需要按接收场景另定文本化规则,并说明规则会怎样改变原值。写完后用 csv.DictReader 读回一次,可以核对列名、行数和包含特殊字符的字段。

参考:Python csv 文档。
https://docs.python.org/3/library/csv.html

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。