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

基于通用逻辑的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 23:40:35