Python使用csv.reader读取文本指定列缺失数值500的修复咨询
问题原因
你写的代码存在两个核心问题,导致漏掉起始值500:
- 分隔符逻辑错误:设置单空格
" "作为csv读取分隔符时,遇到文件中用于对齐列的连续多个空格,会将空格间的空内容识别为独立列;且不同行的前导空格、列间空格数不一致时,同一列数据在不同行的索引位置会出现偏移。其余行的第二列因为连续空格产生的空列挤占位置,刚好落在索引3的位置,所以你能拿到1000及之后的数值,唯独第一行的500不在该索引位上,直接缺失。 - 索引取值错误:Python序列默认从0开始计数,第二列数据对应的正确索引是1,你直接取索引3的列本身就是被空列偏移后的错误列位。
修复方案
不要用单空格硬匹配分隔,优先用自动适配多空格的分割逻辑,同时修正列索引,两种可直接运行的写法如下:
写法1:原生字符串分割(最稳妥,适配所有空白分隔场景)
second_column = [] with open("example", "r") as f: for line in f: # 跳过空行 stripped_line = line.strip() if not stripped_line: continue # 无参数split()会自动将任意长度连续空白(空格/制表符)识别为分隔符,无空列问题 col_list = stripped_line.split() # 取第二列,可根据需要转成整数 second_column.append(int(col_list[1]))
运行后second_column就会包含从500开始到21000的所有目标值,不会缺项。
写法2:保留csv.reader的实现方式
如果要继续用csv库读取,需要加skipinitialspace=True参数自动忽略分隔符后的连续空格,修正索引即可:
import csv with open("example", "r") as f: reader = csv.reader(f, delimiter=" ", skipinitialspace=True) # 过滤空行后取第二列 second_column = [int(row[1]) for row in reader if row]
注意:如果你的文件开头有注释行、表头行,只需要在循环里加个判断跳过对应行数即可,比如开头有1行表头就加
next(f)跳过第一行。
内容的提问来源于stack exchange,提问作者amirre
相关产品推荐
相关产品推荐

