You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python代码报错:_csv.reader与str无法执行+运算,求卢恩校验位生成方案

解决TypeError: unsupported operand type(s) for +: '_csv.reader' and 'str'错误

错误根源

调用luhn_calculate(f1_read)时,传入的f1_read是csv.reader对象,而函数luhn_calculate内部执行partcode + "0",试图将阅读器对象与字符串拼接,直接触发类型不匹配错误。此外代码还存在多处逻辑问题,一并修正。

代码问题梳理

  • 卢恩算法函数定义在for循环内部,会重复定义造成资源浪费,完全没必要。
  • luhn_checksum函数中return total_sum % 10缩进错误,写在for循环内导致第一次迭代就返回结果,计算逻辑完全错误。
  • 校验函数调用时,传参为csv.reader对象而非循环中提取的ICCID字符串code。
  • 代码后半部分的res.read()、sub_id等变量无意义,res是计算出的校验位数字,并非HTTP响应对象,属于冗余代码。
  • 文件操作逻辑混乱,同时打开多个文件但未合理使用。

修正后的完整代码

import csv
import pandas as pd

# 提前定义卢恩算法相关函数,置于循环外部
def luhn_checksum(code):
    length = len(code)
    parity = length % 2
    total_sum = 0
    for i in range(length-1, -1, -1):
        d = int(code[i])
        if i % 2 == parity:
            d *= 2
        if d > 9:
            d -= 9
        total_sum += d
    # 修正return缩进,确保遍历所有数字后返回校验和
    return total_sum % 10

def luhn_calculate(partcode):
    checksum = luhn_checksum(partcode + "0")
    return 0 if checksum == 0 else 10 - checksum

def luhn_validate(full_code):
    return luhn_checksum(full_code) == 0

cols = ['原始ICCID', '带校验位的完整ICCID', '校验结果']
lst = []

input_file = "1.txt"
output_excel = "Output_1397.xlsx"

# 读取输入文件中的ICCID数据
with open(input_file, 'r') as f1:
    reader = csv.reader(f1)
    for row in reader:
        raw_iccid = row[0].strip()
        # 跳过非数字格式的无效ICCID
        if not raw_iccid.isdigit():
            print(f"跳过无效ICCID:{raw_iccid}")
            continue
        # 计算校验位并生成完整ICCID
        check_digit = luhn_calculate(raw_iccid)
        full_iccid = raw_iccid + str(check_digit)
        # 验证完整ICCID的合法性
        is_valid = luhn_validate(full_iccid)
        # 将结果存入列表用于生成Excel
        lst.append([raw_iccid, full_iccid, "有效" if is_valid else "无效"])

# 生成输出Excel文件
df1 = pd.DataFrame(lst, columns=cols)
df1.to_excel(output_excel, index=False)
print(f"处理完成!结果已保存到 {output_excel}")

修正说明

  1. 将卢恩算法函数移至循环外部,避免重复定义。
  2. 修复luhn_checksum函数的return缩进问题,确保遍历所有数字后计算校验和。
  3. 调用校验函数时传入循环提取的raw_iccid字符串,而非csv.reader对象。
  4. 移除冗余的http.client、uuid等无关模块及无效代码。
  5. 优化输出逻辑,生成包含原始ICCID、完整ICCID和校验结果的Excel文件,结果更直观。
  6. 添加格式校验,自动跳过非数字的无效ICCID条目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 14:43:26