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

Chema Cortes pych3m4 en gmail.com
Mie Abr 10 07:18:27 EDT 2019


El mié., 10 abr. 2019 a las 4:21, AGTUGO (<agtugo en gmail.com>) escribió:

> 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
>


En román paladino: quieres filtrar líneas de un texto CSV cuyos campos
cumplan una serie de reglas.

Intenta identificar cuáles son los *invariantes* del proceso y desacoplar
lo que se pueda. En este caso concreto, el procesado línea a línea de un
fichero no debería depender de las reglas a aplicar ni de qué elementos
concretos se van a chequear. Lo mejor es asumir que en el procesado del
fichero únicamente aplicar una regla por línea. Con ello, el trabajo se
reduce a combinar varias reglas en una sola:

rules = (rule1, rule2, rule3)
sels = (2, 5, 6)

def pred(register):
    selector = itemgetter(*sels)
    return all(rule(ele)
               for rule in rules
               for ele in selector(register))


A su vez, el fichero de reglas puede asumir que siempre actúa sobre un
registro de elementos (una lista). Según como sea, puedes sacar estas
reglas a otros ficheros con la idea de poder cambiar fácilmente de reglas
cambiando unos ficheros por otros.

Yendo más allá, podrías tener una colección de reglas predefinidas y crear
con ellas conjuntos (RuleSets), y asociar un RuleSet para cada ficheros CSV.

Las combinaciones son innumerables y se puede complicar todo lo que se
quiera.



-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org
<https://blog.ch3m4.org/pages/busqueda-python-es/>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20190410/c50eb66b/attachment.html>


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