CSV转JSON时报错如何将reader_row[10]缺失值替换为Null
解决方法
核心思路:报错是因为CSV行第10列存在空值,直接调用int()转换空字符串会抛出异常。你可以通过安全类型转换函数处理缺失值,空值会返回Python的None,后续序列化为JSON时会自动转为标准的null值。
步骤1:定义安全转换函数
提前封装通用的类型转换逻辑,自动识别空值返回None:
# 安全转整数,空值返回None def safe_int(val): val = val.strip() return int(val) if val else None # 安全转浮点数,空值返回None def safe_float(val): val = val.strip() return float(val) if val else None # 安全转布尔值,空值返回None def safe_bool(val): val = val.strip() return bool(val) if val else None
步骤2:替换原代码中的类型转换逻辑
把所有数值、布尔类型的转换替换为对应的安全函数,重点修改第10列的转换,其余可能存在缺失的字段也同步处理避免后续报错,修改后的完整代码如下:
import csv import json # 安全转换函数定义 def safe_int(val): val = val.strip() return int(val) if val else None def safe_float(val): val = val.strip() return float(val) if val else None def safe_bool(val): val = val.strip() return bool(val) if val else None l = [] with open("data.csv", 'r') as data_file: reader = csv.reader(data_file) headers = next(reader) for reader_row in reader: d = {} d[headers[11]] = str(reader_row[11]) d[headers[13]] = str(reader_row[13]) d[headers[14]] = str(reader_row[14]) d[headers[18]] = str(reader_row[18]) d[headers[3]] = safe_int(reader_row[3]) d[headers[16]] = safe_bool(reader_row[16]) d[headers[4]] = safe_float(reader_row[4]) d[headers[5]] = str(reader_row[5]) d[headers[10]] = safe_int(reader_row[10]) d[headers[17]] = safe_int(reader_row[17]) d[headers[15]] = safe_int(reader_row[15]) d[headers[0]]={'Address Street': str(reader_row[0]), 'Address City': str(reader_row[1]), 'Address Postcode': str(reader_row[2]) } d[headers[8]]={'Credit Card Number': str(reader_row[8]), 'Credit Card Start Date': str(reader_row[6]), 'Credit Card Expiry Date': str(reader_row[7]), 'Credit Card CVV': safe_int(reader_row[9]), 'Bank IBAN' : str(reader_row[12]) } d[headers[19]]={'Vehicle Make': str(reader_row[19]), 'Vehicle Model': str(reader_row[20]), 'Vehicle Year': safe_int(reader_row[21]), 'Vehicle Type': str(reader_row[22]) } l.append(d) # 导出JSON时Python的None会自动转为JSON标准的null with open("output.json", "w", encoding="utf-8") as f: json.dump(l, f, ensure_ascii=False, indent=2)
补充说明
- 如果你的CSV缺失值不是空字符串,而是
NA、N/A之类的自定义占位符,只要在安全转换函数里增加对应判断逻辑即可。 - 如果不需要把字符串类型的空值转为
null,保持原来的str()调用即可,空值会保留为空字符串。
内容的提问来源于stack exchange,提问作者Vandako
相关产品推荐
相关产品推荐

