基于通用逻辑的Python迭代与CSV索引剔除问题
解决CSV异常行剔除问题
核心逻辑是先以索引2的行(第3行)的列数作为标准,过滤掉所有列数不符合的行,再完成后续的表头替换操作。直接用列表推导式就能高效实现,比手动循环删除更稳妥(避免索引偏移问题)。
修改后的代码如下:
#Comments to the right for f in TD_files: #遍历所有趋势文件 with open(f,newline='',encoding='latin1') as g: #以读模式打开文件 r = csv.reader((line.replace('\0','') for line in g)) #读取文件并剔除空字符 data = [line for line in r] #将所有行存入列表 # 确认基准列数:取索引2的行的列数作为标准 if len(data) >= 3: # 先判断文件行数是否足够取索引2的行 standard_col_count = len(data[2]) # 过滤:只保留列数等于基准的行 data = [row for row in data if len(row) == standard_col_count] # 替换前两行内容 if len(data) >= 2: data[0] = TDmachineID #替换为机器ID行 data[1] = trendHeader #替换为趋势表头行 elif len(data) == 1: data[0] = TDmachineID data.append(trendHeader) else: # 极端情况:过滤后无数据,手动添加表头(可根据需求调整) data = [TDmachineID, trendHeader] with open(f,'w',newline='') as g: #以写模式打开文件 w = csv.writer(g) #初始化写入器 w.writerows(data) #写入所有有效行
关键改动说明:
- 用列表推导式直接筛选符合列数要求的行,避免了循环删除时的索引混乱问题
- 增加了对文件行数的判断,防止因原始文件过短导致的索引越界错误
- 保留了你原本的表头替换逻辑,同时适配了过滤后行数不足的极端情况
内容的提问来源于stack exchange,提问作者Kyle Lucas
相关产品推荐
相关产品推荐

