Creato da pastuweb.com
Share My Page
My Social Accounts
Account FaceBook Account LinkedIn Account Twitter Account Google Plus Account Git Hub

Per facilitare il colloquio fra Python e Windows e i suoi applicativi (Word, Excel) sono stati sviluppati dei moduli ad-hoc raccolti sotto il nome PyWin32.

 
script che legge il contenuto di tutti i documenti Word passati come parametro sulla riga di comando, ne estrae il testo, separa le parole, le conta e mostra le DIECI  parole più comuni tra tutti i documenti.
 
import win32com.client
import glob, sys, os, re
from collections import defaultdict
from operator import itemgetter
try:
    wordapp = win32com.client.DispatchEx("Word.Application")
    solo_alfanumerici = re.compile(r"[a-z0-9]").sub
    dizionario = defaultdict(int)
    for argomento in sys.argv[1:]:
        for nome_doc in glob.glob(argomento):
            print "Sto leggendo %s" % nome_doc
            doc = wordapp.Documents.Open(os.path.abspath(nome_doc))
            testo = solo_alfanumerici(" ", doc.Content.Text.lower())
            for parola in testo.split():
                dizionario[parola]+=1
    print "\nParole comuni: \n"
    for parola, cont in sorted(dizionario.items(), key=itemgetter(1), reverse=True)[:10]:
        print parola, cont
finally:
    wordapp.Quit()
 
Spiegazione:
Con questo comando creiamo un oggeto Word Application:
 
wordapp = win32com.client.DispatchEx("Word.Application")

Questa invece è una regular expression che serve ad individuare tutte le stringhe formate da lettere e numeri, viene creato un oggetto, usato poi successivamente:
 
solo_alfanumerici = re.compile(r"[a-z0-9]").sub
...
 testo = solo_alfanumerici(" ", doc.Content.Text.lower()) #carattere separatore lo spazio
 
Poi viene creato il dizionario:
 
for parola in testo.split():
    dizionario[parola]+=1
 
Internet Explorer
 
In questo caso vi propongo di navigare su un sito web, inserire dei dati in un form e poi provare a inviare il form.
 
Esempio:
import win32com.client, time
ie = win32com.client.DispatchEx("InternetExplorer.Application", None)
ie.Visible = 1
ie.Navigate("http://www.google.com")
while ie.Busy: #aspetto il download della pagina, al termine Busy sarà False, ciclo termina
    time.sleep(0.5) 
ie.document.Forms[0].Elements['q'].value = 'Python manuale'
ie.Document.Forms[0].submit()
 
Molto semplice. Quello che accadrà eseguendo lo script è che si aprira una finestra di Internet Explore con google.com e nella SERP ci sarà il risultato della ricerca "Python manuale".
 
In realtà Google mette a disposizione delle API per interrrogarlo da Python:
 
Daemon
 
è un programma in esecuzione in background, quindi in attesa di qualche evento particolare, senza essere sotto il controllo dell'utente. Quando si verifica la condizione prevista, svolge il compito cui è preposto.
 
Esempio: controllare che un applicazione non sia in esecuzione DUE VOLTE:
import win32api, winerror, win32event
import msvcrt, sys
nome = "singola-istanza-01"
mutex = win32event.CreateMutex(None, False,  nome)
if win32api.GetLastError() == winerror.ERROR_ALREADY_EXISTS:
    print "Applicazione in esecuzione"
    sys.exit(-1)
else:
    print "Premi un tasto..."
    msvcrt.getch()
win32api.CloseHandle(mutex)
 
Il mutex viene tenuto in vita fino alla fine dell'applicazione.
Il mutex identifica l'applicazione in modo univoco. Solo UNA in vita.
 
Provate ad eseguire questo script due volte.
    La PRIMA viene stampato "Premi un tasto...".
    La SECONDA "Applicazione in esecuzione"
 
ctypes
 
è un modulo che fa parte dell'installazione standard di Python.
Permette di interagire con le DLL di Windows e quelle condivise di UNIX (per esempio).
Nella DLL User32.dll (Windows) è presentel'API LockWorkStation che permette il blocco del computer. 
 
Esempio:
import ctypes
ctypes.windll.user32.LockWorkStation()
 
Excel
 
Accedere ad un intervallo di celle, a una singola cella, a una formule e scrivere una nuova formula:
 
import win32com.client
excel = win32com.client.Dispatch("Excel.Applciation")
print excel.ActiveWorkbook.ActiveSheet.Range("A1:B1")
print excel.ActiveWorkbook.ActiveSheet.Range("B8")
print excel.ActiveWorkbook.ActiveSheet.Range("D8").Formula
print excel.ActiveWorkbook.ActiveSheet.Range("D9").Formula = "=SUM(D5:D6)*1.2"
print excel.ActiveWorkbook.ActiveSheet.Range("D8").Borders.Weight = -4380
 
 
Altri script si possono trovare in:
C:\Python25\Lib\site-packages\win32com\demos\
Average (1 Vote)
The average rating is 5.0 stars out of 5.