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

使用保留列表筛选CSV行时误删所有内容的技术问题

问题分析与修复方案

原代码存在的问题

  • 路径处理错误:Windows路径中的反斜杠未转义,会被Python解析为转义字符,导致路径识别异常。
  • 重复创建读取器:已通过csvReader读取表头,后续又重新创建csv.reader(inCountryName),会导致文件读取位置混乱,可能无法获取有效数据。
  • 逻辑判断完全错误:内层循环中把字符串name和列表countryList直接比较(永远不相等),且循环逻辑颠倒——本该保留国家在列表中的行,实际却把每一行重复写入len(countryList)次,同时因为文件被提前清空,最终出现内容丢失。
  • 未写入表头:读取了表头但未写入输出文件,结果会丢失CSV的结构信息。
  • 同时读写同一文件:用w模式打开文件会立即清空原内容,此时原文件的读取操作无法正常获取数据。

修正后的代码

import csv

# 目标国家列表
countryList = ['Azerbaijan', 'Belarus', 'China', 'Estonia', 'Finland', 'Georgia', 'Kazakhstan', 'Latvia', 'Lithuania', 'Mongolia', 'North Korea', 'Norway', 'Poland', 'Ukraine', 'United States', 'Venezuala']

# 用原始字符串处理Windows路径,避免转义问题
file_path = r"C:\Capstone\Data\WIID_30JUN2022_Altered.csv"

# 先读取所有符合条件的行到内存
with open(file_path, "r", newline="", encoding="utf-8") as infile:
    reader = csv.reader(infile)
    header = next(reader)
    country_index = header.index("country")
    # 筛选保留表头和国家在列表中的行
    filtered_rows = [header] + [row for row in reader if row[country_index] in countryList]

# 写入筛选后的内容到原文件
with open(file_path, "w", newline="", encoding="utf-8") as outfile:
    writer = csv.writer(outfile)
    writer.writerows(filtered_rows)

关键修改说明

  1. 路径改为原始字符串,避免转义字符引发的路径错误。
  2. 先将所有符合条件的行读取到内存,再写入文件,彻底避免同时读写同一文件的冲突。
  3. 用列表推导式简化筛选逻辑,直接判断国家是否在目标列表中,符合条件才保留。
  4. 明确写入表头,保证输出文件的结构完整性。
  5. 添加newline=""和指定编码,避免CSV写入时出现多余空行或编码乱码问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 15:10:23