Python tips n°1

/********************************************************* Herramientas *****************************************************/
pythonfiddle.com    (ejecutar  codigos y hay ejemplos)
- IDE
  Aptana
  https://www.jetbrains.com/pycharm/
 
/********************************************************* Programacion Python *****************************************************/ 
"""
Esto es un comentario
"""
 
'''
Esto es otro comentario
'''
 
import database                                   # Importación de módulo
db = database.Database()
#Hacer consultas de base de datos
 
from database import Database as DB               # Importamos solo la clase que necesitamos (Database)
db = DB()
#Hacer consultas de base de datos
 
from database import Database as DB               # Importamos solo la clase que necesitamos (Database) y locambiamos el nombre a DB
db = DB()
#Hacer consultas de base de datos
 
from database import Database, Tabla              # Importamos 2 clases (Database y Tabla)
from database import *                            # Importamos todas clases y funciones del módulo
 
- No podemos poner modulos dentro de módulos
- Los archivos pueden ir dentrod e directorios
- Se usa 2 tipos de importacion: (imports absolute, imports relative) es especicifica ruta completa
import escolar.alumnos.alumno = escolar.alumnos.Alumno()            # Import relativo
from escolar.alumnos.alumnos import Alumno                          # Import absolute modo 01
alumno = Alumno()    
 
from escolar import alumnos                                         # Import absolute modo 02
alumno = alumnos.Alumno()    
 
Los metodo van eb clase}Las clases van en Dódulos
Los paquetes van en Paquetes
 
--------------------------------------
==== Funcion ====
def main():
 
   pass
        
if __name_ == "__main__":
   main()
    
    
    
    
==== Condicionales ====
-- Sentencia if
text = "wilzon"
if texto == "wilzon"
   print "Ese es mi nombre ;)"
    
-- Sentencia if-else
texto = raw_input("> ")                             # Esta sentencia es para ingresar texto a nuestro programa en Python
if texto == "wilzon"
    print "Escribiste Wilzon :)"
else:
    print "No escribiste wilzon :("
     
    
-- Sentencia if-elif-else
numero = int(raw_input("> "))                       # Se requiere que sea entero por eso anina con la funcion "raw_input"
if numero > 0
    print "Es un numero positivo"
elif numero < 0:
    print "Es un numero negativo"
else:
    print "Es un cero"   
 
-- solo existen 2 bucles while y for
-- Crar ciclos (bucles)
def main():                                          # Asi se define la funcion
    var = 0
    while(var < 5)
       print "Num: " + str(var)
       var = var + 1
     
-- for
    semana = ["Lun", "Mar", "Mie", "Jue", "Vie", "Sab", "Dom"]
    for dia in semana:
        print dia
     
if __name_ == "__main__":
   main()
 
  
============== Clases ==============
class miClase():                                    # Nombre de la clase    
   def metodo1(self)
       print "Metodo uno de la clase miClase"
        
   def metodo2(self, texto)
       print "El meotod2 recibe la cadena: " + texto
        
   def main():
      objeto = miClase()
      objeto.metodo1()
      objeto.metodo2(raw_input("> "))
 
       
class claseDos(miClase)                              # Herencia clase madre "miClase", clase hija "claseDos"
   def metodo2(self)
       print "Metodo 2 de la clase claseDos"
        
   def metodo1(self)
       miClase.metodo1(self)
       print "El meotod 1 de la clase claseDos"
        
def main():
   objeto = miClase()
   objeto.metodo1()
   objeto.metodo2(raw_input("> "))
    
   objetoDos = claseDos()
   objetoDos.metodo2()
   objetoDos.metodo1()
    
----
======= Trabajar con las clases date, time y datetime =======
-- pass es operacion nula
--------------------------------
== Fechas ==
 
from datetime import time
from datetime import date
from datetime import datetime
 
def main():
   hoy = date.today()
   print hoy
    
   print "El dia es: " + hoy.day, " el mes es: ",hoy.month," el anio es: ",hoy.year   
   print "El # del dia es: ",hoy.weekday()
     
   hoy = datetime.today()
   print hoy
 
   hora = datetime.time(datetime.now())
   print hora
    
   dias = ["Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado", "Domingo"]
   nroDia = date.weekday(hoy)
   print "El numero del dia es: %d" % nroDia                             # Significa que donde esta el %d se va colocar la variable que esta despues del % en este caso es "nroDia" es un netero por eso se utiliza % de lo contrario se utilizaria "s"
   print "El dia es: %s" % dias[nroDia]
        
     
   pass
       
    
if __name_ == "__main__":
   main()
 
--------------------------------
== Formato en fechas y horas ==
 
from datetime import datetime
 
def main():
   hoy = datetime.now()
   print hoy
   print hoy.strftime("%Y")                              # Retorna el año completo si es "y" solo 2 digitos      
   print hoy.strftime("%B")                              # Retorna el mes completo
   print hoy.strftime("%d")                              # Retorna el num mes
   print hoy.strftime("%A")                              # Retorna el dia completo
   print hoy.strftime("%a, %d %B %Y")                    # Retorna fecha: "Mon, 30 December 2014"
    
   print hoy.strftime("%I")                              # Retorna hora en formato de 12 horas
   print hoy.strftime("%H")                              # Retorna hora en formato de 24 horas
   print hoy.strftime("%M")                              # Retorna minuto
   print hoy.strftime("%S")                              # Retorna segundo
   print hoy.strftime("%I:%M:%S %p")                     # Retorna hora: "05:03:16 PM"
    
    
   pass
       
    
if __name_ == "__main__":
   main()
 
--------------------------------
== Objetos Timedelta ==
- Permite hacer operaciones con fechas
 
from datetime import time
from datetime import date
from datetime import datetime
from datetime import timedelta
 
print timedelta(days=365,hours=10,minutes=20)                                             # Definimos nuestro intervalo
print "En un anio será: " + str(datetime.now() + timedelta(days=365))                     # La fecha que sera en un año :)
print "En 2 semanas y 1 dia será: " + str(datetime.now() + timedelta(weeks=2,days=1))     # La fecha que sera en 2 semanas y 1 dia
 
fecha = datime.now() - timedelta(weeks=1)
formatoFecha = fecha.strftime("%A, %d %B del %Y")
print "Hace una sema fue: " + formatoFecha                                                 # Lunea, 16 December del 2014   
 
 
--------------------------------
== Calendarios ==
 
import calendar
 
calendario = calendar.TextCalendar(calendar.SUNDAY)           # Significa que el primer dia del calendario será domingo
calendarioTexto = calendario.formatmonth(2014,10,0,0)
print calendarioTexto                                         # Esto muestra el calendario del mes de octubre
 
calendarioHTML = calendar.HTMLCalendar(calñendar.MONDAY)
calendarHTML = calendarioHTML.formatmonth(2014,10)
print calendarHTML                                             # Calendario en formato HTML                            
 
for i calendario.itermonthdays(2014,10):
    print i                                                    # Esto muestra de 0 a 31 que es el dia del mes
 
for nombre in calendar.month_name:
    print nombre                                               # Imprime los mnombre de meses
     
for nombre in calendar.day_name:
    print nombre                                               # imprime dias
 
 
--------------------------------
== Archivos ==   
 
-- Escritura    
def main():
   """
   w+  escribe, el '+' significa que si no hay archivo lo crea
   a+ significa que escribe al final del archivo el '+' significa que si no hay archivo lo crea
   """
   archivo = open("arvhico.txt","w+")
   for i in range(10):
      archivo.write("Esta bes la linea: %d\n" %i)                # Con esto escribimos en el archivo
    
   pass
        
if __name_ == "__main__":
   main()
    
    
-- Lectura   
def main():   
  """
  r significa leer
  """
   archivo = open("arvhico.txt","r")                               
   if archivo.mode == "r":
      lineasARchivo = archivo.readlines()
      for linea in lineasARchivo:
      print linea
    
      archivio.close()
   pass
        
if __name_ == "__main__":
   main()   
    
    
    
-- OS Path (Rutas)  
import os
from os import path
 
import datetime
from datetime import date, time, timedelta
import time
  
def main():   
   print os.name
   print "El archivo existe: %s" % str(path.exists("archivo.txt"))               # Este metodo retorna valor Boolean (True or False)
   print "Es un archivo: %s" %str(path.isfile("archivo.tx"))                     # Comprobar si es archivo o no
   print "Es un directorio: %s" %str(path.isdir("archivo.tx"))                   # Comprobar si es carpeta o no
   print "El directorio es: %s" %path.realpath("archivo.txt")                    # Muestra la ruta del directorio de este archivo
   print "El directorio y el nombre es: %s" %str(path.split(path.realpath(archivo.txt)))     # Imprime la lista, imprime el directorio donde se encuentra el archivo y el nombre del directorio
   print "El directorio y el nombre es: %s" %str(path.split(path.realpath(archivo.txt))[1])  # En posicion 1 me muestra el nombre de l carpeta
    
   tiempo = time.ctime(patch.getmtime("archivo.txt"))                            # Obtener la fecha de la ultima modificaion que se hizo al archivo  (obtenemos con la clase time)
   print tiempo                                                                  # Formato en q devuelve: Sat Dec 28 09:56:33 2014
   print datetime.datetime.fromtimestamp(path.getmtimer("archivo.txt"))          # Obtenemos lo mismo con la clase 'datime'. retorna el formato: 2014-12-28 09:56:53.487344   
    
   tTranscurrido = datetime.datetime.now() - datetime.datetime.fromtimestamp(path.getmtime("archivo.txt"))
   print "Ha pasado %s desde que se modificó ela rchivo " % str(tTranscurrido)   # Mustra el tiempo q paso desde la ultima podificacion
   print "Ha transcurrido %s segundo" % str(tTranscurrido.total_seconds)         # Mustra el tiempo q paso desde la ultima podificacion en segundos
       
   pass
        
if __name_ == "__main__":
   main()
    
    
    
-- Shell utilities
- Manipular archivos usando el sistema operativo de la computadora   
    
import os
import shutil
from zipfile im port Zipfile
from os import path   
from shutil import make_archive    """importar esta clase para comprimir archivo"""
 
   def main():
   if(path.exists("archivo.txt")):
      src = path.realpath("archivo.txt")
      rutaArchivo, nombreArchivo = path.split(src)
      print "La ruta es: %s" % rutaArchivo
      print "El nombre es: %s" % nombreArchivo
       
      os.rename("archivo.txt", "nuevoArchivo.txt")                         # Renombrar archivo
       
      archivoNuevo = src + ".bak"                                           # Para hacer esto importamos el modulo shutil
      shutil.copy(src, archivoNuevo)                                        # Copiamos el archivoNuevo con el nombre archivoNuevo.bak.  Al hacer esto no copia la metadata ose ala fecha en que se modifico, etc.
      shutil.copystat(src, archivoNuevo)                                    # Copiamos el archivoNuevo con el nombre archivoNuevo.bak.  Con esto copiamos la metadata la fecha de modificacion ,e tc.
       
       
      """Creamos archivo comprimido"""
      """Crea un archivo comprimido de todo lo que esta en la carpeta, para eso se importa la clase 'from shutil import make_archive' """     
      ruta, nombre = path.split(path.realpath("nuevoArchivo.txt"))
      shutil.make_archive("comprimido","zip",ruta)
       
      """Crea un archivo comprimido con los archivo que voy elegir, para eso importaclmos la clase 'from zipfile im port Zipfile' """     
      """ Lo que me permite la palabra 'with' es crear unn encapsulamiento para q todo lo que esta despues del ':' pertenece al archivoZip """
      with Zipfile("comprimido.zip","w") as nuevozip:
          nuevozip.writer("nuevoArchivo.txt")
          nuevozip.writer("nuevoArchivo.txt.bak")
          nuevozip.writer("otroArchivo.yxy")
     
  
    
    
   pass
        
if __name_ == "__main__":
   main()
    
    
    
    
--------------------------------
== Extraer datos desde internet ==   
- Extraer informacion de la URL - HTML
import urllib2
 
def main():
    url = "http://WilzonMB.com"
    response = urllib2.urlopen(url)
    print "El Codigo de respuesta es: %s " % response.getcode()
     
    data = response.read()
    print data
 
   pass
        
if __name_ == "__main__":
   main()
 
    
    
-- Manipular JSON   
- Extraer informacion de Json   
 
import urllib2
import json
 
def manipularJSON(data):
   JSON = json.loads(data)
   if "title" in JSON["metadata"]:
      print JSON["metadata"]["title"]
       
   numeroArticulos = JSON["metadata"]["count"]
   print "Hay %d articulos" % numeroArticulos
    
   for i in JSON["features"]:
       print i["articulos"]["pollos"]
       print "%2.1f" % i["articulos"]["pollos"]
        
       cantidad = i["cantidad"]
       if(cantidad != none and cantLeidos > 0):
         print "%2.1f" % i["articulos"]["pollos"]
    
   pass
 
    
def main():
    url = "http://WilzonMB.com/json"
    response = urllib2.urlopen(url)
    if response.getcode() == 200:
       manipularJSON(response.read())
     
 
   pass
        
if __name_ == "__main__":
   main()   
    
    
    
 
-- Manipular HTML   
- Analizar y procesar datos de HTML
 
from HTMLParser import HTMLParser
 
class analizarHTML(HTMLParser):        
     ''' Sobre escribiendo el metodo  "handle_starttag" de "HTMLParser" '''
     def handle_starttag(self, tag, attrs):
        print "Se abrio la etiqueta tag:  \n", tag
        if attrs.__len__ > 0:
            for i in attrs:
                print "Con el atributo: ", i[0]
                print "Con el valor: ", i[1]
        pass    
         
     ''' Sobre escribiendo el metodo  "handle_starttag" de "HTMLParser" '''
     def handle_data(self, data):
        print "Contiene estos datos:", data        
        pass
         
         
    ''' Sobre escribiendo el metodo  "handle_comment" de "HTMLParser" '''
    def handle_comment(self, data):
        print "Esta es este comentario \n", data
        pass
     
     
 
def main():
    analizar = analizarHTML()
    archivo = open("ejemplohtml.html")
    if archivo.mode == "r":
        analizar.feed(archivo.read())
     
   pass
        
if __name_ == "__main__":
   main()