[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