You need to enable JavaScript to run this app. Python读取分号分隔CSV时调用split得到异常拆分结果?
优惠活动
大模型
产品
解决方案
定价
更多

Python读取分号分隔CSV时调用split得到异常拆分结果?

异常拆分的原因分析

1. csv.reader 默认配置与文件格式不匹配

csv.reader默认使用逗号 , 作为字段分隔符,但你的CSV文件实际用分号 ; 分隔字段,且字段内部的逗号(比如a 0,25作为小数的小数点逗号)是内容的一部分,不是分隔符。
未指定delimiter参数时,csv模块会先按错误的逗号规则拆分整行:

  • 第三行2222;a 0,25;1.00仅包含一个逗号,会被拆成两个元素:['2222;a 0', '25;1.00']

2. 冗余的二次拆分操作

csv.reader迭代返回的每一行本身就是拆分完成的列表,不需要额外手动split。你的代码中取row[0]再按分号拆分的逻辑,相当于在csv已经错误拆分的基础上再次处理:

  • 第三行被csv拆出的第一个元素是2222;a 0,再按分号拆分就得到了异常输出['2222', 'a 0']

3. 无效的类型判断

csv.reader迭代返回的每行永远是列表类型,isinstance(row, str)判断永远不会触发,属于完全冗余的代码。

正确实现方式

优先使用csv模块的内置能力处理,不需要手动拆分,匹配文件格式配置即可:

import csv

for file in csvs:
    with open(file, encoding="utf8") as f:
        # 指定分号为分隔符,完全匹配你的CSV格式
        reader = csv.reader(f, delimiter=";")
        for row in reader:
            # csv模块已经完成正确拆分,直接输出即可
            print(row)

特殊场景补充

如果字段内部包含真实换行符(比如foo和bar之间是实际换行,不是字面的\n字符),需要将该字段用双引号包裹,符合标准CSV规范:

id;name;number
1111;"foo 
bar";2.00
2222;a 0,25;1.00

csv模块默认会识别双引号包裹的内容,不会把内部的换行、逗号当成分隔符。

注意:不要手动对CSV行执行split操作,标准CSV存在引号包裹、转义字符、跨行字段等特殊规则,手动拆分很容易出错,优先使用csv模块的内置能力处理。


内容的提问来源于stack exchange,提问作者xtlc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.11 04:54:03