Advertisement
max_tre

wa msg counter gui

Apr 22nd, 2017
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.74 KB | None | 0 0
  1. # -*- coding: cp1252 -*-
  2.  
  3. from Tkinter import *
  4. from tkFileDialog import askopenfilename
  5. import unicodedata
  6.  
  7. def invia():
  8.     lines=[line.rstrip('\n') for line in open(filetxt,'r')]
  9.     nome_filetxt=unicodedata.normalize('NFKD', (filetxt.split('/')[-1]).split('.')[0]).encode('ascii','ignore')
  10.     pass
  11.     if nome_filetxt[0:18]=='Chat WhatsApp con ':
  12.         nome_gruppo=nome_filetxt[18:]
  13.     else:
  14.         nome_gruppo=nome_filetxt #vgruppo.get()
  15.     while nome_gruppo[-1]==' ':
  16.         nome_gruppo=nome_gruppo[:-1]
  17.     data1=vdata1.get()
  18.     inizio=(int(data1.split('/')[2]),int(data1.split('/')[1]),int(data1.split('/')[0])) #(AAAA,MM,GG)
  19.     data2=vdata2.get()
  20.     fine=(int(data2.split('/')[2]),int(data2.split('/')[1]),int(data2.split('/')[0])) #(AAAA,MM,GG)
  21.     data_inizio=max(inizio,(2000+int(lines[0][6:8]),int(lines[0][3:5]),int(lines[0][0:2])))
  22.     data_inizio=date(data_inizio[0],data_inizio[1],data_inizio[2])
  23.     data_fine=min(fine,(2000+int(lines[-1][6:8]),int(lines[-1][3:5]),int(lines[-1][0:2])))
  24.     data_fine=date(data_fine[0],data_fine[1],data_fine[2])
  25.     totgiorni=(data_fine-data_inizio).days+1
  26.     msg=[]
  27.     lista=[]
  28.     num=''
  29.     for line in lines:
  30.         line=line.translate(None,'‪¬')
  31.         num=(find_between(line,'- ',':'))
  32.         nick=num_nick(num).title()
  33.         line=line.replace(num,nick)
  34.         if (line[0:2]+line[3:5]+line[6:8]+line[10:12]+line[13:15]).isdigit() and nick!='':
  35.             if data((2000+int(line[6:8]),int(line[3:5]),int(line[0:2])),inizio,fine):
  36.                 msg.append(nick)
  37.     autori=set(msg)
  38.     totmsg=0
  39.     for autore in autori:
  40.         n=msg.count(autore)
  41.         lista.append([n,autore])
  42.         totmsg+=n
  43.         for i in range(len(lines)):
  44.             lines[i]=lines[i].replace(autore,'')
  45.     lista.sort(reverse=True)
  46.     text=''
  47.     text += 'Messaggi dal '+data_inizio.strftime('%d %b %Y')+' al '+data_fine.strftime('%d %b %Y')+'\n'
  48.     text += 'nel gruppo '+nome_gruppo.upper()+':\n'
  49.     text += 'AUTORE                MSG      %        MSG/D\n'
  50.     for [x,y] in lista:
  51.         y=y.replace('ã²','o`')
  52.         y=num_nick(y).title()
  53.         if len(y)>21:
  54.             y=y[0:18]+'...'
  55.         text += y
  56.         text += (22-len(y))*' '
  57.         text += str(x)
  58.         text += (9-len(str(x)))*' '
  59.         text += str(int(round(100.0*x/totmsg,0)))+'%\t'
  60.         text += str(int(round(1.0*x/totgiorni,0)))+' '*(5-len(str(int(round(1.0*x/totgiorni,0)))))+'\n'
  61.     text += 'Totale messaggi: '+str(totmsg)+' ('+str(int(round(1.0*totmsg/totgiorni,0)))+' messaggi al giorno)'
  62.     ltext.config(text=text)
  63.     # esci=raw_input('Premi un tasto qualunque per uscire.')
  64.  
  65.  
  66. from datetime import date
  67.  
  68. def find_between(s,first,last):
  69.     try:
  70.         start=s.index(first)+len(first)
  71.         end=s.index(last,start)
  72.         return s[start:end]
  73.     except ValueError:
  74.         return ""
  75.  
  76. def num_nick(numero):
  77.     switcher = {
  78.         'Numero1': 'Nick1',
  79.         'Numero2': 'Nick2',
  80.         #etc
  81.     }
  82.     return switcher.get(numero,numero)
  83.  
  84. def data(data,inizio,fine):
  85.     if inizio<=data<=fine:
  86.         return True
  87.     else:
  88.         return False
  89.  
  90. def parole(parola):
  91.     return len([lines[i] for i in range(len(lines)) if parola.lower() in lines[i].lower()])
  92.  
  93.  
  94. def seleziona():
  95.     global filetxt
  96.     filetxt=askopenfilename(filetypes=[("File di testo","*.txt")])
  97.  
  98. root=Tk()
  99. root.title('Premiooooo TU TU RUUU')
  100. root.configure(bg='white')
  101. icona = PhotoImage(file='wa.gif')
  102. root.tk.call('wm','iconphoto',root._w,icona)
  103.  
  104. # filetxt=askopenfilename()
  105.  
  106. # vgruppo=StringVar(value='')
  107. vdata1=StringVar(value='')
  108. vdata2=StringVar(value='')
  109. vtext=StringVar(value='')
  110.  
  111. # lgruppo=Label(root,text='Inserisci il nome della chat: ', bg='white')
  112. lgruppo=Label(root,text="Seleziona un'altra chat da analizzare:", bg='white')
  113. ldata1=Label(root,text='Inserisci la data di inizio (GG/MM/AAAA):', bg='white')
  114. ldata2=Label(root,text='Inserisci la data di fine (GG/MM/AAAA):', bg='white')
  115. ltext=Label(root,text='',bg='white',font='Courier')
  116.  
  117. # egruppo=Entry(root,textvariable=vgruppo,bg='white')
  118. edata1=Entry(root,textvariable=vdata1,bg='white')
  119. edata2=Entry(root,textvariable=vdata2,bg='white')
  120.  
  121. binvia=Button(root,text='OK!',command=invia)
  122. bgruppo=Button(root,text='Sfoglia...',command=seleziona)
  123.  
  124. # lgruppo.grid(row=0,column=0,padx=10,pady=10)
  125. # egruppo.grid(row=0,column=1,padx=10,pady=10)
  126. lgruppo.grid(row=0,column=0,padx=10,pady=10)
  127. bgruppo.grid(row=0,column=1,padx=10,pady=10)
  128. ldata1.grid(row=1,column=0,padx=10,pady=10)
  129. edata1.grid(row=1,column=1,padx=10,pady=10)
  130. ldata2.grid(row=2,column=0,padx=10,pady=10)
  131. edata2.grid(row=2,column=1,padx=10,pady=10)
  132. binvia.grid(row=3,column=0,columnspan=2,padx=10,pady=10)
  133. ltext.grid(row=4,column=0,columnspan=2,padx=10,pady=10)
  134.  
  135. root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement