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

Chema Cortes pych3m4 en gmail.com
Vie Abr 12 09:29:42 EDT 2019


El vie., 12 abr. 2019 a las 13:57, AGTUGO (<agtugo en gmail.com>) escribió:

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

Me había perdido entre renglones y listas.

Entonces es más simple:

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

def pred(register):
    return all(rule(register[idx])
               for rule,idx in zip(rules, sels))

De todos modos, se puede hacer de muchas formas. Y complicarlo de muchas
formas también.




>
> 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
>>
> _______________________________________________
> 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/>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20190412/b0d8831a/attachment.html>


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