Usuario:Chewie/cuenta ediciones.py
Apariencia
Este script recibe un dump de la tabla de metadatos de revisiones comprimido en gzip y crea una lista ordenada de tuplas que relacionan a un usuario con el número de ediciones que ha realizado.
# -*- coding: utf-8 -*- import gzip import re import sys # Lo que debe recibir este script es un dump en XML de la tabla stub-meta-history, # comprimido con gzip. url = sys.argv[1] f = gzip.open(url, 'r') user_pattern = re.compile('<username>(.*)</username>') # Este diccionario acabará teniendo un usuario (o IP) como índice y un entero # con el número de ediciones como valor. editions_dic = {} sys.stderr.write("Examinando fichero y contando ediciones") for line in f: user = re.findall(user_pattern, line) if user: userstring = user[0] if editions_dic.has_key(userstring): editions_dic[userstring] = editions_dic[userstring] + 1 else: editions_dic[userstring] = 1 sys.stderr.write(".") f.close() # Como un diccionario no tiene orden, lo transformamos en una lista y # lo ordenamos. editions_list será una lista de tuplas ('Usuario', n_ediciones) # ordenada por el número de ediciones. print >> sys.stderr, "Ordenando lista...\n" editions_list = [(v, k) for k, v in editions_dic.items()] editions_list.sort() editions_list.reverse() editions_list = [(k, v) for v, k in editions_list] # Aquí habría que hacer algo útil con editions_list. Por ejemplo, serializarla # en un fichero. import pickle tstamp = re.findall('eswiki-([0-9]*)-stub', url)[0] print >> sys.stderr, "Escribiendo objeto en fichero...\n" d = open('wikipedistas_por_ediciones_%s.pickle' % tstamp, 'w') pickle.dump(editions_list, d) d.close()