[Python-es] Operadores de comparacion como input de funcion para evitar comparaciones hardcoded

AGTUGO agtugo en gmail.com
Mar Abr 9 22:20:47 EDT 2019


Hola Lista de python es espa;ol,

Espero que les guste el formato de mi pregunta con comentarios

import operator as op
from operator import itemgetter

# Tengo que analizar varios CSVs y las "celdas" deben de cumplir ciertas
reglas
# en caso de que sea as'i todo el rengl'on es de utilidad y se guarda

#Estas son las columnas de inter'es, se analizar'a renglon por rengl'on
idx_columns = (2,5,6)

# Estas reglas pueden cambiar y las quiero lo menos "hardcoded posible"
# dentro de la funcion funct_to_receive # quiero hacer un set de reglas
# por cada csv por eso las quiero afuera de la funci'on para poderlas
cambiar
# si es posible un python file por cada csv, o un configuration file pero
no se
# como guardaria esas comparaciones en un string por ejemplo

# ____________________AQUI ES LA PREGUNTA__________________
# ______Esta es la parte que me causa conflicto___________
# uso un set de reglas de comparacion que guardo en una lista
# pero siento que no lo estoy haciendo  de la forma correcta,
# es esta solucion muy hacky? poco pythonica?

def rule1(ele):
    return ele == 'watermelon'
def rule2(ele):
    return ele != 'None'
def rule3(ele):
    return (ele == 'peach' or ele == '')

#Esto lo uso como input en la funcion

rules = [ rule1, rule2, rule3]

# funcion que guarda cada renglon, busca en otra base de datos para cotejar
# informacion y la convierte en diccionario para ser usada como entrada
# para un template de JINJA2 para generacion de codigo

def func_to_receive(csv_file, idx_ele_tbc, rules):
    #To-do: Implementar
    pass

#  Este es el caso para un solo renglon

list_to_be_compared = ['apple', 'orange', 'watermelon', 'carrots', 'kiwi' ,
'None' , '']
#Aqui aislo solo los elementos que me interesan (celdas)
elements_to_be_compared = itemgetter(*idx_columns)(list_to_be_compared)

#Aqui aplico las comparaciones la regla que le corresponde a cada columna

list_comparisons = [rule(ele) for rule,ele in zip(rules,
elements_to_be_compared)]
all_comparison = all(list_comparisons)
print(all_comparison)
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20190409/81182f92/attachment.html>


Más información sobre la lista de distribución Python-es