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

Python不使用Pandas过滤CSV时报generator object is not subscriptable错误

CSV列过滤功能错误修复方案

错误根因

你遇到的TypeError: 'generator' object is not subscriptable报错由以下几个问题共同导致:

  • 列表构造逻辑错误:Archivo_Csv函数中你用lista =[(生成器表达式)]的写法,会直接把整个生成器对象作为列表的唯一元素,遍历lista时拿到的i是生成器对象,无法进行下标或属性访问。
  • namedtuple访问方式错误:namedtuple不能像字典一样用i['属性名']的方式访问,需要用点语法i.属性名,或者先调用._asdict()转为字典后再用下标访问。
  • 函数逻辑错误:next()是迭代器遍历专用方法,你直接传入属性值属于误用;且原函数在循环第一次就直接return,只会返回第一条数据的内容,无法获取所有行的指定两列。

修复后代码

TestFiltraor.py 代码

import csv
from collections import namedtuple

Almacenamiento_de_datos = namedtuple('DESAPARECIDOS_INDIA_2018_2020',
                                     'Tipo_de_sangre,Nombres,Genero,Cuerpo,Distrito,DENUNCIADO,Estatura,Edad,Cuando_Desparecio')

def Archivo_Csv(Archivo): 
    with open(Archivo, encoding = 'utf-8') as f:
        lineador = csv.reader(f, delimiter=";")
        next(lineador)
        # 改为列表推导式,直接生成namedtuple组成的列表,去掉多余的小括号
        lista = [Almacenamiento_de_datos(Tipo_de_sangre, Nombres, Genero, Cuerpo, Distrito, DENUNCIADO, float(Estatura), int(Edad), Cuando_Desparecio) 
                 for Tipo_de_sangre, Nombres, Genero, Cuerpo, Distrito,DENUNCIADO, Estatura, Edad, Cuando_Desparecio in lineador]
        return lista

def Todos_Los_nombres(lista):
    res = []
    for fila in lista:
        # 用点语法访问namedtuple属性,收集所有行的姓名和年龄
        res.append( (fila.Nombres, fila.Edad) )
    return res

调用代码

from TestFiltraor import Archivo_Csv, Todos_Los_nombres

def TestFiltrador(Desaparecidoscsv):
    Nom = Todos_Los_nombres(Desaparecidoscsv)
    print("Los nombres y sus edad son : ")
    for nombre, edad in Nom:
        print(f"姓名:{nombre},年龄:{edad}")

# 运行示例
if __name__ == "__main__":
    # 替换为你的CSV文件路径
    datos = Archivo_Csv("tu_archivo.csv")
    TestFiltrador(datos)

功能验证

运行后会逐行打印CSV文件中所有行的Nombres和Edad两列内容,无需依赖Pandas库。

内容的提问来源于stack exchange,提问作者Crisdax Music Infinity

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:45:04