Python读取CSV拆分单元格值后列表长度与预期不符问题求助
问题原因及排查方案
核心大概率原因:split(" ")的用法错误
你代码中使用split(" ")按单空格拆分字符串,是导致数值缺失的最常见原因:
- 如果单元格内的分隔符不是单空格(比如是制表符、多个连续空格、全角空格),
split(" ")无法正确拆分,多个数值会被当成一个元素存入列表,直接导致总数量大幅减少 - 即便分隔符是单空格,若单元格存在首尾空格,
split(" ")会拆分出空字符串,也会干扰计数逻辑
其他可能原因
- CSV读取行数不符合预期:csv.reader默认会将单元格内带引号的换行符识别为单元格内容,而非行分隔符,可能导致实际读取的有效行数少于1213
- 部分行第二列的数值本身不足6个,或者存在空值
排查步骤
- 首先确认读取的有效行数是否正确:在移除表头后打印
len(pwrNumList),确认值为1213,如果不对说明CSV读取环节存在问题 - 遍历校验每行拆分后的长度,定位异常行:
for idx, item in enumerate(pwrNumList): split_res = item.split() # 先改用无参数split测试 if len(split_res) !=6: print(f"行号{idx+2}(含表头)拆分后长度为{len(split_res)},原始内容:{repr(item)}")
repr()可以打印出隐藏的空白字符,方便你判断分隔符类型
修复代码
将拆分逻辑的split(" ")改为无参数的split(),无参数的split()会自动匹配任意类型的空白字符(单空格、多空格、制表符、换行符等),同时自动忽略首尾空格、不会产生空字符串元素:
pwrNumSplitLst = [item for sublist in [item.split() for item in pwrNumList] for item in sublist]
修改后重新打印长度,即可得到符合预期的结果。
内容的提问来源于stack exchange,提问作者VJ1222
相关产品推荐
相关产品推荐

