sábado, 14 de mayo de 2011

Hoy traigo un script de python que cuenta el número de veces que se repite un alguna extensión de archivo(.txt .exe) en todo mi sistema de archivos, tenía curiosidad.
Este script devuelve los 30 mas comunes.




Debo confesar que la parte ordered no es código mio, aun no entiendo bien como usar lambdas en python solo se que sorted devuelve (en este caso) una lista ordenada de tuplas de menor a mayor dependiendo de los valores en el diccionario.

Update:
Ya entendí como funciona aquí la función sorted.
Vamos a deshuesar la función

Primero veamos, sorted necesita un parametro obligatorio, un iterable, en este caso estamos usando el metodo items de nuestro diccionario lo convertimos en una lista de tuplas, y usaremos esta lista de tuplas como iterable, considera este código

Esa es la lista de tuplas que usará sorted().
Ahora, a sorted() le queremos decir que nos ordene por el elemento [1] de la tuplas osea

El elemento 1 es el número de veces que se repite la extensión porque las tuplas en el caso real se ven asi ('.txt',9318) ok?
Ok ya entendemos porque x[1]
Entendamos porque lambda
Lambda crea funciones en una sola linea, estas son funciones completas que acepta parametros y devuelven algo, y resulta que el parametro key necesita ser obligatoriamente una función por eso no podemos ponerle simplemente

Porque eso no seria una función sino un int(el numero de veces que se repite .txt es un int), necesitamos una función entonces creamos una función a la que sorted() le va a enviar como parametro el iterable en cuestión es decir una ('.txt',9318) y esta función va a decir que ('.txt',9318) ahora es = x, y que de x queremos return x[1]
es como si pusieramos

Donde x es la tupla en cuestión.

Lindo no? cheers humanos!


Si tienen curiosidad este es el resultado

9550 archivos .py! yay!

1 comentario:

  1. Por cierto, los colores bonitos en el código los tengo que agradecer a http://alexgorbatchev.com y al autor de este tutorial para hacerlo en blogger http://blog.cartercole.com/2009/10/awesome-syntax-highlighting-made-easy.html

    ResponderEliminar