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

Python CSV处理代码误清空文件问题求助

问题排查与修复

原代码核心错误分析

  1. 行号判断逻辑颠倒:
    用户要求检查自然偶数行(第2、4、6...行),但原代码中row_num%2==0匹配的是第1、3、5...行(因为row_num从0开始,且在循环末尾才递增),导致检查对象完全错误。
  2. 业务逻辑与需求偏离:
    • 需求是成对处理「上一行+当前偶数行」,但代码逐行处理,逻辑混乱。
    • 错误使用row[1:]截断行,违反「保留整行」的要求。
    • new_rows.pop()的逻辑错误,会误删之前的有效行,甚至在空列表时引发异常风险。
  3. 行号递增时机错误:
    在append之后才递增row_num,导致行号与实际行的对应关系完全错位。

修复后的代码

import csv

def scan_csv_file(file_path):
    """
    处理CSV文件:
    - 检查自然偶数行(第2、4、6...行)是否包含"Census 1850"
    - 若包含,保留该行及紧邻的上一行
    - 若不包含,删除该行及上一行
    - 若总行数为奇数,最后一行单独保留(无对应偶数行需检查)
    """
    try:
        # 读取所有行到内存
        with open(file_path, 'r', newline='') as file:
            csv_reader = csv.reader(file)
            all_rows = list(csv_reader)
        
        new_rows = []
        # 成对处理行:每对是[奇数行, 偶数行](自然行号)
        for i in range(0, len(all_rows), 2):
            # 处理到最后一行(奇数行,无对应偶数行)
            if i + 1 >= len(all_rows):
                new_rows.append(all_rows[i])
                continue
            
            row_odd = all_rows[i]    # 上一行(自然奇数行)
            row_even = all_rows[i+1] # 当前检查的偶数行
            
            # 检查偶数行是否包含目标短语
            if "Census 1850" in ','.join(row_even):
                # 保留两行
                new_rows.append(row_odd)
                new_rows.append(row_even)
            # 不包含则跳过这两行,不添加
        
        # 写入处理后的内容
        with open(file_path, 'w', newline='') as file:
            csv_writer = csv.writer(file)
            csv_writer.writerows(new_rows)
        
        print("CSV文件处理完成。")
    except Exception as e:
        print(f"错误:{e}")

file_path = r"C:\Users\My Name\Downloads\tracing_the_land_2_test.csv"
scan_csv_file(file_path)

修复说明

  1. 成对处理逻辑:通过range(0, len(all_rows), 2)遍历,每次处理两行(自然奇数行+偶数行),完全符合需求的成对保留/删除规则。
  2. 行号逻辑纠正:直接通过索引定位自然偶数行(i+1位置),避免行号计数混乱。
  3. 边界情况处理:如果总行数为奇数,最后一行(无对应偶数行)会被单独保留。
  4. 符合需求的保留规则:找到目标短语时完整保留两行,否则直接跳过,逻辑清晰无歧义。

内容的提问来源于stack exchange,提问作者asdf0089

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 07:14:57