Python 处理 CSV 入门:带逗号的字段为何不能直接 split?

举报
yd_263910519 发表于 2026/10/29 09:54:37 2026/10/29
【摘要】 用 Python 标准库读取一份示例 CSV,理解引号、表头、编码和数值转换,并将筛选结果写入新文件。

收到一份表格导出的 CSV 文件时,初学者可能会用逗号把每一行直接拆开。但如果某个字段本身包含逗号,结果就会错位。Python 的 csv 标准库可以处理常见的分隔符和引号规则,适合用来完成小型数据整理。

一、准备一份示例数据

在练习目录中新建 UTF-8 编码的 tasks.csv,内容如下:

name,team,hours
整理文档,"开发,测试",2
检查日志,运维,3
更新配置,开发,1

第二行的团队名称用双引号包住,里面的逗号属于字段内容。如果对整行使用 split(','),这个字段会被误拆成两段。CSV 中的引号还有转义规则,因此不要自己拼接或拆分复杂字段。

二、按表头读取数据

在同一目录创建 read_tasks.py:

import csv

with open('tasks.csv', encoding='utf-8', newline='') as source:
    reader = csv.DictReader(source)
    for row in reader:
        print(row['name'], row['team'], row['hours'])

运行 python read_tasks.py,第一条数据中的团队应显示为“开发,测试”。没有指定字段名时,DictReader 使用首行作为表头,后续每行可以按列名取值。打开 CSV 文件时设置 newline='',让 csv 模块处理换行细节。

三、筛选并写到新文件

下面把工时不少于 2 的记录写入另一个文件,保留原始数据:

import csv

with open('tasks.csv', encoding='utf-8', newline='') as source:
    rows = list(csv.DictReader(source))

with open('selected.csv', 'w', encoding='utf-8', newline='') as target:
    writer = csv.DictWriter(target, fieldnames=['name', 'team', 'hours'])
    writer.writeheader()
    for row in rows:
        if int(row['hours']) >= 2:
            writer.writerow(row)

运行后,结果应包含表头和前两条记录。写入器会处理示例中字段内的逗号,不必手动加引号。注意 w 模式会覆盖同名输出文件,运行前请确认输出路径。

四、处理真实数据时先检查边界

示例中的 hours 都是整数文本;默认读取结果是字符串,参与数值比较前需要转换。真实文件可能有空值、非数字或缺列,直接转换会报错,应该按业务规则记录问题行或提示用户,而不是悄悄当作零。

如果列名对不上,先检查表头的空格、大小写和编码。遇到带 UTF-8 BOM 的文件,可尝试读取时使用 utf-8-sig;其他编码应先确认来源。数据量很大时,也可逐行处理,避免像示例一样把所有记录存入内存。

先用几行包含逗号和空值的样本验证,再处理完整文件,并核对输出行数。这样既能发现格式问题,也更容易保护原始数据。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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