如何用Python调用Excel列匹配用户输入的任意国家代码?
解决方案
你的代码存在几个明显问题:
- 变量名冲突:循环里用
cc当遍历变量,直接覆盖了用户输入的国家代码变量 - 重复读取同一列数据,做了冗余操作
- 匹配判断的代码没写完
下面是修改后的完整代码,能实现统计用户输入的任意3位国家代码在Excel第3列中的匹配次数:
import pylightxl as xl # 读取Excel文件 with open('city.xlsx', 'rb') as f: db = xl.readxl(f) # 获取Sheet1第3列的所有数据 country_codes = list(db.ws(ws='Sheet1').col(col=3)) # 获取用户输入并转为大写,避免大小写匹配问题 target_cc = input("请输入3位国家代码:").upper() # 统计匹配次数 matches = 0 for code in country_codes: # 把Excel里的代码也转大写,确保大小写不敏感匹配 if code.upper() == target_cc: matches += 1 print(f"匹配到 {matches} 条记录")
核心改进说明:
- 变量名区分:把用户输入的变量改成
target_cc,遍历用code,彻底避免变量覆盖的问题 - 大小写统一处理:不管是用户输入还是Excel里的代码都转成大写,就算Excel里有小写代码也能匹配到
- 简化逻辑:只遍历一次列数据就完成统计,删掉了原来冗余的字典统计(如果不需要统计所有国家代码的次数,这部分完全没必要)
- 补全了匹配判断的逻辑,明确和用户输入的目标代码对比
如果需要同时统计所有国家代码的出现次数,后续可以快速查询任意代码,也可以用下面的高效写法:
import pylightxl as xl with open('city.xlsx', 'rb') as f: db = xl.readxl(f) country_codes = list(db.ws(ws='Sheet1').col(col=3)) # 一次性统计所有国家代码的出现次数 code_counts = {} for code in country_codes: upper_code = code.upper() # 用get方法简化计数逻辑,不存在的键默认返回0 code_counts[upper_code] = code_counts.get(upper_code, 0) + 1 # 获取用户输入 target_cc = input("请输入3位国家代码:").upper() # 从统计字典里拿结果,没有匹配的话返回0 matches = code_counts.get(target_cc, 0) print(f"匹配到 {matches} 条记录")
这种写法只需要遍历一次列数据,之后查询任意国家代码的次数都能直接从字典里取,效率更高。
内容的提问来源于stack exchange,提问作者Etropal
相关产品推荐
相关产品推荐

