Python 导出中文 CSV 的三个细节
【摘要】 使用 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)