Python兼容带/无引号CSV:读取shipment_id值的异常问题
解决CSV文件读取兼容问题(带/无引号字段)
嘿,我来帮你搞定这个CSV读取的麻烦!其实Python的csv模块本身就支持同时处理带双引号和无引号的字段,你遇到的问题大概率是因为默认配置没适配好,或者文件编码/格式有小问题。
修正后的兼容代码
直接用这段代码,不管是带引号的示例A还是无引号的示例B,都能正常读取shipment_id的值:
import csv # 替换成你的文件路径 file_location = "your_file.csv" with open(file_location, 'r', encoding='utf-8-sig') as f_obj: # 明确配置引号规则,兼容两种格式 reader = csv.DictReader( f_obj, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL ) for line in reader: # 用get方法避免字段名不匹配时抛出错误,更健壮 shipment_id = line.get('shipment_id', '未找到该字段') print(shipment_id)
关键调整说明
- 编码处理:加上
encoding='utf-8-sig'是为了兼容带BOM的UTF-8文件,避免读取到奇怪的前缀字符导致字段名匹配失败(比如表头变成\ufeffshipment_id)。 - 引号配置:
quotechar='"'指定双引号为包裹字符,quoting=csv.QUOTE_MINIMAL让模块自动识别:当字段包含逗号(分隔符)时用引号包裹,无分隔符的字段不管有没有引号都能正确解析。 - 健壮性优化:用
line.get('shipment_id', 默认值)代替直接索引,避免因为表头大小写不一致(比如Shipment_ID)或者字段缺失导致程序崩溃。
特殊情况处理
如果你的无引号CSV里存在字段包含逗号但没加引号的情况(比如to_address_1是123 Main St, Apt 4B),这属于不规范的CSV格式,会导致解析错误。这种情况要么手动修复CSV文件给对应字段加上引号,要么更换分隔符(比如用;代替,)。
内容的提问来源于stack exchange,提问作者Kiril Climson
相关产品推荐
相关产品推荐

