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

AGTUGO agtugo en gmail.com
Vie Abr 12 07:56:53 EDT 2019


En este caso cada regla se aplica a un elemento específico del registro,
pero la posición siempre es la misma en todos los registros.

On Fri, Apr 12, 2019, 3:01 AM Chema Cortes <pych3m4 en gmail.com> wrote:

>
> El vie., 12 abr. 2019 a las 2:32, AGTUGO (<agtugo en gmail.com>) escribió:
>
>>
>> Excelente respuesta, aunque no entiendo bien la parte de anidar los fors,
>> ahi estas aplicando todas las reglas en todos los elementos del registro.
>> Perdon por la respuesta rapida,
>>
>
> He intentado *imitar* el código que habías puesto. No obstante, lo lógico
> es que cada regla se aplique a todo el registro y que de ahí seleccione los
> elementos que necesite comprobar.
>
>
>
>
>>
>> On Wed, Apr 10, 2019 at 4:18 AM Chema Cortes <pych3m4 en gmail.com> wrote:
>>
>>> 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/>
>>> _______________________________________________
>>> Python-es mailing list
>>> Python-es en python.org
>>> https://mail.python.org/mailman/listinfo/python-es
>>>
>>
>>
>> --
>> Arturo Muñoz Tolosa
>> _______________________________________________
>> Python-es mailing list
>> Python-es en python.org
>> https://mail.python.org/mailman/listinfo/python-es
>>
>
>
> --
> 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/>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailman/listinfo/python-es
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20190412/a176cdf1/attachment.html>


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