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

Python无Pandas环境读取CSV指定列去重并过滤无效值方法

无Pandas依赖的高效实现方案

直接用Python标准库自带的csv模块处理就行,不需要额外安装依赖,比手动读行split的鲁棒性高很多,还能一次性解决你遇到的换行、重复读文件、值过滤的问题。

核心优化逻辑:

  • 仅打开读取一次文件,避免重复IO开销
  • 用csv模块自动处理行尾换行、字段转义等CSV格式细节,不会出现手动split漏处理\n的问题
  • 边读取边过滤无效值、边做去重,不需要先存全量列表再二次处理,内存占用更低
  • 无效值用集合存储,判断过滤的时间复杂度是O(1)

完整实现代码:

import csv

# 存储最终去重结果
result = set()
# 定义需要剔除的无效值
invalid_vals = {"none", "record", ""}

with open("machines.csv", "r", newline="", encoding="utf-8") as f:
    csv_reader = csv.reader(f)
    # 跳过表头行,如果你的文件没有表头就删除下面这行
    next(csv_reader, None)
    for row in csv_reader:
        # 取第4列Node、第5列Resolve,strip去掉首尾空白/换行符
        node = row[3].strip()
        resolve = row[4].strip()
        # 仅将非无效值加入集合,自动去重
        if node not in invalid_vals:
            result.add(node)
        if resolve not in invalid_vals:
            result.add(resolve)

# 如果需要列表格式结果,直接转list(result)即可
原代码的问题对应修复说明
  • 末尾带\n的问题:csv模块读取时会自动解析行边界,配合.strip()可以彻底清除字段首尾的换行、多余空格、制表符等冗余字符
  • 剔除指定值的问题:在值加入结果集之前直接做成员判断,不符合要求的值直接跳过,不需要等全量数据收集完再遍历过滤
  • 效率问题:原代码两次打开文件读取全量内容,文件越大重复IO的开销越高,优化后仅需一次遍历即可完成所有处理,性能提升明显

补充说明:如果你的文件里无效值存在大小写混写情况(比如"None"、"NONE"、"Record"),可以把判断逻辑改成if node.strip().lower() not in invalid_vals,同时保证invalid_vals里存的全是小写的无效字符串,就能匹配所有大小写形式的无效值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 13:51:09