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

Python CSV列搜索取值脚本报错求助:ord()参数类型错误

问题解决:TypeError: ord() expected a character, but string of length 2 found

错误原因

你的代码用ord(pickup_column) - 65将列字母转为索引,但这个方法仅支持单字母列名(如A、C)。当遇到AC这种双字母列名时,ord()无法处理长度为2的字符串,直接触发TypeError。

修复方案

实现一个通用函数,将Excel风格的列名(包含单/多字母,如A、AC、ZZ)转换为对应的0-based索引,替换原来的索引计算逻辑。

修改后的完整代码

import os
import csv
import json

def excel_col_to_index(col_name):
    """将Excel列名(如A、AC、ZZ)转换为0-based索引"""
    index = 0
    for char in col_name.upper():
        index = index * 26 + (ord(char) - ord('A') + 1)
    return index - 1  # 转为0-based索引

# 读取搜索值
with open('C:/asg/ftpfiles/!searcher/01parseall.json') as json_file:
    dataparse = json.load(json_file)

PartNumber = dataparse['distributornumsku']
vendorPartNumber = dataparse['manufacturervendor']

search_values = [PartNumber, vendorPartNumber]

# 配置路径和列
directory_path = 'C:/asg/ftpfiles/!!!!!allsearch'
search_columns = ['A', 'C']
pickup_columns = ['A', 'C', 'E', 'U', 'T', 'AC']

# 遍历CSV文件
for filename in os.listdir(directory_path):
    if filename.endswith('.csv'):
        with open(os.path.join(directory_path, filename), encoding="utf8", newline='') as csvfile:
            csvreader = csv.reader(csvfile)
            headers = next(csvreader)
            
            for row in csvreader:
                # 检查搜索列是否匹配
                for search_col in search_columns:
                    col_idx = excel_col_to_index(search_col)
                    # 确保索引不超出当前行的列数,避免索引越界
                    if col_idx < len(row) and row[col_idx] in search_values:
                        # 提取目标列的值
                        pickup_values = []
                        for pickup_col in pickup_columns:
                            pickup_idx = excel_col_to_index(pickup_col)
                            if pickup_idx < len(row):
                                pickup_values.append(row[pickup_idx])
                            else:
                                pickup_values.append(None)  # 列不存在时填充None
                        print(pickup_values)
                        break  # 找到匹配后停止当前行的搜索

关键修改点

  1. 新增excel_col_to_index函数:
    • 支持所有Excel风格的列名(单字母、多字母)
    • 通过26进制转换逻辑计算索引,最后转为0-based索引(适配Python列表的索引规则)
  2. 替换索引计算逻辑:
    • 搜索列和提取列的索引都通过这个函数获取,不再使用ord()
  3. 增加索引越界检查:
    • 避免因CSV文件列数不足导致的IndexError,列不存在时返回None

额外说明

  • 函数会自动将列名转为大写,输入小写(如ac)也能正常处理
  • 索引越界的处理逻辑可根据需求调整,比如改为抛出异常或跳过该列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 14:17:39