Python Pandas实现UPC批量添加校验位与CSV导出操作
带校验位UPC批量处理实现方案
类型适配说明
- 读取CSV时指定
dtype=str保留UPC前导零的操作完全正确,不需要把字符串形式的UPC整体转为数值类型。 - 你编写的
add_check_digit函数内部已经通过逐字符转int的方式完成了校验计算,和字符串输入天然兼容,无需修改核心计算逻辑。仅需修正原代码的缩进问题:if check_digit == 10分支下的check_digit = 0语句缺少缩进,直接运行会触发语法错误,修正后的完整函数代码如下:
def add_check_digit(upc_str): upc_str = str(upc_str) if len(upc_str) != 12: raise Exception("Invalid length") odd_sum = 0 even_sum = 0 for i, char in enumerate(upc_str): j = i+1 if j % 2 == 0: even_sum += int(char) else: odd_sum += int(char) total_sum = (even_sum * 3) + odd_sum mod = total_sum % 10 check_digit = 10 - mod if check_digit == 10: check_digit = 0 return upc_str + str(check_digit)
DataFrame列级批量处理实现
- 不需要手动循环逐条调用函数,借助pandas的
apply方法即可把单值处理逻辑直接应用到整列。假设你的原始12位UPC存储在raw_upc列(替换为你CSV里的实际列名即可),核心实现仅需一行代码:
# 生成带校验位的13位UPC,存入新列 upc['full_upc_with_check'] = upc['raw_upc'].apply(add_check_digit)
- 如果担心个别异常值(比如长度不符合12位要求的脏数据)导致整个流程中断,可以套一层简单的异常捕获,实现容错批处理:
def safe_add_check_digit(upc_str): try: return add_check_digit(upc_str) except Exception as e: # 异常值标注错误信息和原始内容,方便后续排查 return f"INVALID: {e} | 原始值:{upc_str}" # 替换上面的apply调用,使用容错版本 upc['full_upc_with_check'] = upc['raw_upc'].apply(safe_add_check_digit)
结果导出CSV方法
- 导出时必须保留字符串存储规则,避免前导零被自动截断,调用
to_csv时的关键参数配置如下:
upc.to_csv( "/Users/lee/Desktop/upc_with_check_digit.csv", index=False, # 不导出pandas自动生成的无意义行索引 dtype=str # 强制所有字段以文本格式存储,保住UPC的前导零 )
实用提示:即使导出时设置了字符串类型,用Excel双击直接打开CSV仍可能丢失前导零,正确打开方式是通过Excel的「数据-从文本/CSV导入」功能,在导入向导中提前把UPC列指定为文本格式。
内容的提问来源于stack exchange,提问作者Nicole
相关产品推荐
相关产品推荐

