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

Python开发CSV列筛选功能时自定义过滤函数未按预期执行问题

代码问题原因及修复方案

你的CSV文件已经成功打开,问题均为代码语法逻辑错误导致,具体错误共3处:

  • 问题1:abrir_csv函数列表推导式写法错误
    你给生成namedtuple的表达式额外套了一层括号,导致列表中仅存入1个生成器对象,而非预期的多条namedtuple实例数据。
    错误写法:contenido=[(Almacenamiento_de_datos(...) for ... in lector)]
    外层括号会把内部逻辑识别为生成器,不会逐个生成元素填充列表。
  • 问题2:Filtrar_Contenido函数格式化逻辑位置错误
    你将遍历逻辑写在了format方法的参数内,实际格式化的是整个生成器对象,而非每个用户的名字字段。
    错误写法:contenido1 = {"{}".format(s.Nombres for s in Doc)}
    这行代码只会生成1个元素,即生成器对象的字符串地址。
  • 问题3:打印函数无返回值
    你在TestFiltro_nombres中打印Tetscontador的执行结果,但该函数仅做打印操作,没有return语句,默认返回None,因此控制台会额外输出None。

修正后的代码

1. CSV读取函数

def abrir_csv (Doc):
    with open( Doc , encoding='utf-8') as f:
        lector = csv.reader(f)
        next(lector)
        # 移除生成器外层多余的括号,使用标准列表推导式
        contenido = [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 lector]
        return contenido

2. 内容过滤函数

def Filtrar_Contenido (Doc):
    # 将遍历逻辑移到集合推导式外层,逐个格式化名字字段
    contenido1 = {"{}".format(s.Nombres) for s in Doc}
    return contenido1

3. 结果打印逻辑

def Tetscontador(datos):
    for dato in datos:
        print(dato)

def TestFiltro_nombres(fichero):
    # 移除多余的外层print,Tetscontador本身已完成打印操作
    Tetscontador(Filtrar_Contenido(fichero))
    print("Estos son los nombres de las personas desaparecidas")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:54:03