lunedì 23 giugno 2008

Semplicità disarmante

Chi ha esperienza di programmazione in Java può ben valutare il confronto.
Ma anche rispetto ad altri linguaggi credo che in fatto di semplicità Python non sia secondo a nessuno.

Riporto qui 3 esempi.

  • Scrittura lettura su file.
      • fout = open("output.txt", "w")
      • fout.write("La prima riga\n")
      • fout.write("Una seconda riga cinchialesca\n")
      • fout.close()
      • fin = open("output.txt", "r")
      • for line in fin:
        print line
  • Eseguire un comando del sistema operativo.
      • import os
      • fd = os.popen('calc')
      • #outtext = fd.read()
      • fd.close()
  • Lettura di una database via ODBC*.
      • import odbc
      • try:
        s = odbc.odbc('NomeODBC') # mi collego al DSN
        cur = s.cursor()
        cur.execute('select * from NomeTabella')
        rec = cur.fetchall()
        for i in rec:
        print i[0] + ' -- ' + i[1] #Nota - Stampo i campi in posizione 0 e 1
      • except:
        print 'errore'
*Per utilizzare gli ODBC occorre installare anche l'estensione per Windows che trovate qui: http://sourceforge.net/projects/pywin32/

lunedì 16 giugno 2008

Spedire un email con Python

Un semplice programma per spedire un messaggio di testo tramite un server SMTP

import smtplib
server = smtplib.SMTP('nomeserver-SMTP','porta')
server.login('utente', 'password')
server.sendmail('indirizzomitente','indirizzodestinatario','testo di prova invio')
print "inviato"
server.quit()

giovedì 12 giugno 2008

Configurare app.yaml

Sintetizzo (e forse banalizzo) alcuni concetti per renderli spero più comprensibili.
Nel file app.yaml si trovano le configurazioni dei comandi che Google App recepisce tramite il browser.
Aggiungendo le righe di cui sotto (al file app.yaml)
  • handlers:
  • - url: /nomecomando/(.*?)/(.*)
  • script: cartellafiles/d2/\1.py
diciamo al programma che quando arriva una riga-comando come questa :
  • http://localhost:8080/nomecomando/gprog/gcom
vada nella sottocartella "cartellafiles/d2/" legga il programma gprog.py ed esegua il comando gcom, ovvero:
  • cartellafiles/d2/gprog.py gcom
Nel programma gprog.py dovremo configurare opportunamente il "main" che dovrà comprendere correttamente le istruzioni "http://localhost:8080/nomecomando/gprog/gcom" come sotto, per richiamare la classe MainPage
  • def main():
  • application = webapp.WSGIApplication(
  • [('nomecomando/gprog/gcom', MainPage)
  • ('nomecomando/gprog/ins1*',ins1,
  • ....etc...
  • ],
  • debug=True)

*Altre istruzioni possono poi essere aggiunte.

mercoledì 11 giugno 2008

Google Docs Api


Ho provato le Api dei Google Docs, naturalmente in versione Python.

E' possibile fare molte cose interessanti, per esempio leggere e scrivere dati direttamente da programma sui fogli di calcolo presenti nelle cartelle dei GoogleDocs.

Qui un esempio di codice.
Se lo provate da console locale (python example.py) fate attenzione durante il comando update ad inserire la colonna come numero.
Es. update 1 1 'prova'.
Inserirà la stringa 'prova' nella cella 'A1'.

Per accedere direttamente ai vostri SpreadSheet su Google dovete individuare il codice del documento ed il sotto-codice del foglio specifico.

Per fare questo in modo diretto vi consiglio di ricavare i codici stampandoli tramite questi comandi :
print self.curr_key
print self.curr_wksht_id
Potete aggiungerli ad example.py.

Ho poi provato a far funzionare il programma dalle Google App e ci sono riuscito, ma solo facendo l'updolad anche di tre librerie aggiuntive: atom,_xmlplus, gdata.

giovedì 5 giugno 2008

komodo

Ho provato Komodo Edit.
La versione 4.3.2 ha qualche problema.

Ho scoperto che c'è la 4.4.0 beta1.

Vediamo se hanno coperto un po' di buchi.

mercoledì 4 giugno 2008

Bulk Upload

Dopo non pochi sforzi sono finalmente riuscito a fare il Bulk Upload di una tabella con date e numeri.


def __init__(self):
bulkload.Loader.__init__(self, 'xxx',[
('data', lambda x: datetime.strptime(x,"%Y/%m/%d %H:%M:%S")),
('float', lambda x: float(x)),
('numero', int),
('nome', str),
('nomenumero, lambda x: float(x) if not x == 'ERROR' else None),
])


grazie a l8rz.