SlideShare a Scribd company logo
1 of 84
Download to read offline
Programaci´n en Python
                                 o

         Departamento de Sistemas Telem´ticos y Computaci´n (GSyC)
                                       a                 o

                           gsyc-profes (arroba) gsyc.es


                               Marzo de 2010




GSyC - 2010                                Programaci´n en Python
                                                     o               1
c 2010 GSyC
                                      Algunos derechos reservados.
                          Este trabajo se distribuye bajo la licencia

                     Creative Commons Attribution Share-Alike 3.0


GSyC - 2010   Programaci´n en Python
                        o                                               2
Contenidos
      1   El Lenguaje Python
      2   Programaci´n en Python
                       o
            Tipos de objeto
            Cadenas
            Listas
            Diccionarios
            Tuplas
            Cadenas Unicode
            Sentencias de control
            Funciones
            Ficheros
            Cadenas de documentaci´n
                                  o
            Excepciones
      3   Librer´
                ıas
            Librer´ commands
                   ıa
            Librer´ sys
                   ıa
            Librer´ os, shutil
                   ıas
GSyC - 2010                            Programaci´n en Python
                                                 o              3
El Lenguaje Python

 El Lenguaje Python



              Lenguaje de autor creado por Guido van Rossum en 1989
              Muy relacionado originalmente con el S.O. Amoeba
              Disponible en Unix, Linux, MacOS, Windows,
              Libre
              Lenguaje de Script Orientado a Objetos (no muy puro)
              Muy alto nivel
              Librer´ muy completa
                    ıa




GSyC - 2010                                         Programaci´n en Python
                                                              o              4
El Lenguaje Python




              Verdadero lenguaje de prop´sito general
                                        o
              Sencillo, compacto
              Sintaxis clara
              Interpretado => Lento
              Ofrece persistencia
              Recolector de basuras
              Muy maduro y muy popular
              Aplicable para software de uso general




GSyC - 2010                                         Programaci´n en Python
                                                              o              5
El Lenguaje Python




      Programa python

      for x in xrange(1000000):
                print x

      Su equivalente Java

      public class ConsoleTest {
             public static void main(String[] args) {
                    for (int i = 0; i < 1000000; i++) {
                                      System.out.println(i);
                                                      }
                               }
      }




GSyC - 2010                                      Programaci´n en Python
                                                           o              6
El Lenguaje Python




      Programa python
      for i in xrange(1000):
                x={}
                for j in xrange(1000):
                    x[j]=i
                    x[j]

      Su equivalente Java
      import java.util.Hashtable;
      public class HashTest {
          public static void main(String[] args) {
              for (int i = 0; i < 1000; i++) {
                  Hashtable x = new Hashtable();
                  for (int j = 0; j < 1000; j++) {
                      x.put(new Integer(i), new Integer(j));
                      x.get(new Integer(i));
                  }
              }
          } }




GSyC - 2010                                       Programaci´n en Python
                                                            o              7
El Lenguaje Python

 Librer´
       ıas



      Python dispone de librer´ Nativas y Normalizadas para
                              ıas
              Cadenas, listas, tablas hash, pilas, colas
              N´meros Complejos
               u
              Serializaci´n, Copia profunda y Persistencia de Objetos
                         o
              Regexp
              Unicode, Internacionalizaci´n del Software
                                         o
              Programaci´n Concurrente
                        o
              Acceso a BD, Ficheros Comprimidos, Control de Cambios...




GSyC - 2010                                         Programaci´n en Python
                                                              o              8
El Lenguaje Python




      Librer´ relacionadas con Internet:
            ıas
              CGIs, URLs, HTTP, FTP,
              pop3, IMAP, telnet
              Cookies, Mime, XML, XDR
              Diversos formatos multimedia
              Criptograf´
                        ıa




GSyC - 2010                                       Programaci´n en Python
                                                            o              9
El Lenguaje Python




      La referencia sobre todas las funciones de librer´ podemos
                                                       ıa
      encontrarlas en la documentaci´n oficial, disponible en el web en
                                      o
      muchos formatos
              Hasta la versi´n 2.5.4 (diciembre de 2008), se denomina
                            o
              python library reference
              Desde la versi´n 2.6, se denomina python standard library
                            o




GSyC - 2010                                       Programaci´n en Python
                                                            o              10
El Lenguaje Python

 Inconvenientes de Python

      Adem´s de su velocidad limitada y necesidad de int´rprete
          a                                             e
      (Como todo lenguaje interpretado)
              No siempre compatible hacia atr´s
                                             a
              Uniformidad.
              Ej: funci´n len(), m´todo
                        o         e                     items()
              Algunos aspectos de la OO
              Python is a hybrid language. It has functions for procedural
              programming and objects for OO programming. Python bridges the
              two worlds by allowing functions and methods to interconvert using
              the explicit “self” parameter of every method def. When a function
              is inserted into an object, the first argument automagically becomes
              a reference to the receiver.
              ...


GSyC - 2010                                         Programaci´n en Python
                                                              o                     11
Programaci´n en Python
                                      o




      El int´rprete de python se puede usar
            e
           En modo interactivo
              koji@mazinger:~$ python
              Python 2.5.2 (r252:60911, Oct 5 2008, 19:24:49)
              [GCC 4.3.2] on linux2
              Type "help", "copyright", "credits" or "license" for more information.
              >>> print "hola mundo"
              hola mundo
              >>> 3/2
              1
              >>> 3/2.0
              1.5

              Mediante scripts
              #!/usr/bin/python -tt
              print "hola mundo"    #esto es un comentario
              euros=415
              pesetas=euros*166.386
              print str(euros) + " euros son "+ str(pesetas) + " pesetas"




GSyC - 2010                                          Programaci´n en Python
                                                               o                       12
Programaci´n en Python
                                    o




      La l´ınea #!/usr/bin/python indica al S.O. d´nde est´ el
                                                  o       a
      int´rprete que sabe procesar el fuente
         e
              Debe ser exactamente la primera l´
                                               ınea
              No puede haber espacios entre la admiraci´n y la barra
                                                       o

      #Este ejemplo es doblemente incorrecto
      #! /usr/bin/python -tt
      # ¡MAL!


      En distintos Unix el int´rprete puede estar en distintos sitios. Para
                              e
      aumentar la compatibilidad, a veces se usa
      #!/usr/bin/env python
      print "Hola mundo"


      Aunque (en Linux) esto no permite pasar par´metros como -tt
                                                 a

GSyC - 2010                                        Programaci´n en Python
                                                             o                13
Programaci´n en Python
                                    o

 Operadores


                       En orden de precedencia decreciente:
         +x, -x, ~x    Unary operators
         x ** y    Power
         x * y, x / y, x % y    Multiplication, division, modulo
         x + y, x - y    Addition, subtraction
         x << y, x >> y    Bit shifting
         x & y    Bitwise and
         x | y    Bitwise or
         x < y, x <= y, x > y, x >= y, x == y, x != y,
         x <> y, x is y, x is not y, x in s, x not in s
                                Comparison, identity,
                                sequence membership tests
         not x     Logical negation
         x and y    Logical and
         lambda args: expr            Anonymous function




GSyC - 2010                                        Programaci´n en Python
                                                             o              14
Programaci´n en Python
                                  o


      Identificadores (nombre de objetos, de funciones...):
           Letras inglesas de ’a’ a ’z’, en may´sculas o min´sculas. Barra
                                               u            u
           baja ’ ’ y n´meros
                       u
           Sensible a may´sculas/min´sculas
                          u             u
           Se puede usar utf-8 y latin-1 en las cadenas y comentarios
               Si el editor no marca adecuadamente la codificaci´n del
                                                               o
               fichero, aparecer´ un error
                                a
               SyntaxError: Non-ASCII character ’xc3’ in file ./holamundo.py on
               line 4, but no encoding declared;
               see http://www.python.org/peps/pep-0263.html for details

               y ser´ necesario a˜adir en la segunda l´
                    a            n                    ınea del fuente
               # -*- coding: utf-8 -*-

               o bien
               # -*- coding: iso-8859-1 -*-


      Python es
          Din´micamente tipado (frente a est´ticamente tipado)
             a                               a
          Fuertemente tipado (frente a d´bilmente tipado)
                                        e
GSyC - 2010                                      Programaci´n en Python
                                                           o                       15
Programaci´n en Python
                                     o


      En Python la declaraci´n de variables es impl´
                             o                     ıcita
      (no hay declaraci´n expl´
                        o      ıcita)
           Las variables “nacen” cuando se les asigna un valor
           Las variables “desaparecen” cuando se sale de su ´mbito
                                                            a
              La declaraci´n impl´
                          o      ıcita de variables como en perl puede
              provocar resultados desastrosos
      #!/usr/bin/perl
      $sum_elementos= 3 + 4 + 17;
      $media=suma_elementos / 3;    # deletreamos mal la variable
      print $media;   # y provocamos resultado incorrecto


              Pero Python no permite referenciar variables a las que nunca
              se ha asignado un valor.
      #!/usr/bin/python
      sum_elementos= 3 + 4 + 17
      media=suma_elementos / 3    # deletreamos mal la variable
      print media;   # y el int´prete nos avisa con un error
                               e

GSyC - 2010                                         Programaci´n en Python
                                                              o              16
Programaci´n en Python
                                    o

 Funciones predefinidas




              abs() valor absoluto
              float() convierte a float
              int() convierte a int
              str() convierte a string
              round() redondea
              raw_input() acepta un valor desde teclado




GSyC - 2010                                        Programaci´n en Python
                                                             o              17
Programaci´n en Python
                                     o

 Sangrado y separadores de sentencias

              ¡En Python NO hay llaves ni begin-end para encerrar bloques
              de c´digo! Un mayor nivel de sangrado indica que comienza
                  o
              un bloque, y un menor nivel indica que termina un bloque.
              Las sentencias se terminan al acabarse la l´ınea (salvo casos
              especiales donde la sentencia queda “abierta”: en mitad de
              expresiones entre par´ntesis, corchetes o llaves).
                                   e
              El car´cter  se utiliza para extender una sentencia m´s
                    a                                               a
              all´ de una linea, en los casos en que no queda “abierta”.
                 a
              El car´cter : se utiliza como separador en sentencias
                    a
              compuestas. Ej.: para separar la definici´n de una funci´n de
                                                      o              o
              su c´digo.
                  o
              El car´cter ; se utiliza como separador de sentencias escritas
                    a
              en la misma l´ınea.

GSyC - 2010                                         Programaci´n en Python
                                                              o                18
Programaci´n en Python
                                      o




              La recomendaci´n oficial es emplear 4 espacios
                            o
                   PEP-8 Style Guide for Python Code
                   David Goodger, Code Like a Pythonista: Idiomatic Python
                   Traducci´n al espa˜ol:
                           o         n
                   Programa como un Pythonista: Python Idiom´tico
                                                              a
              Emplear 8 espacios o emplear tabuladores es legal
              Mezclar espacios con tabulares es muy peligroso.
              Para que el int´rprete lo advierta
                             e
              #!/usr/bin/python -t

              Para que el int´rprete lo prohiba
                             e
              #!/usr/bin/python -tt




GSyC - 2010                                          Programaci´n en Python
                                                               o              19
Programaci´n en Python
                                      o              Tipos de objeto

 Tipos de objeto

      En python todo son objetos: cadenas, listas, diccionarios,
      funciones, m´dulos. . .
                  o
              En los lenguajes de scripting m´s antiguos como bash o tcl, el
                                             a
              unico tipo de datos es la cadena
              ´
              Los lenguajes imperativos m´s habituales (C, C++,
                                             a
              pascal. . . ) suelen tener (con variantes) los tipos: booleano,
              car´cter, cadena, entero, real y matriz
                 a
              Python tiene booleanos, enteros, reales y cadenas. Y adem´s,
                                                                       a
              cadenas unicode, listas, tuplas, n´meros complejos,
                                                u
              diccionarios, conjuntos...
                   En terminolog´ python se denominan tipos de objeto
                                 ıa
                   Estos tipos de objeto de alto nivel facilitan mucho el trabajo
                   del programador


GSyC - 2010                                           Programaci´n en Python
                                                                o                   20
Programaci´n en Python
                                   o              Tipos de objeto

 Comprobaci´n de tipos
           o

      #!/usr/bin/python -tt
      import types
      if type("a") == types.StringType:
          print "ok, es una cadena"
      else:
          print "no es una cadena"



      Tipos de objeto habituales:
      BooleanType
      IntType
      LongType
      FloatType
      StringType
      ListType
      TupleType
      DictType



GSyC - 2010                                        Programaci´n en Python
                                                             o              21
Programaci´n en Python
                                    o              Cadenas

 Cadenas


              No existe tipo char
              Comilla simple o doble
              print "hola"
              print ’hola’
              print ’me dijo "hola"’
              m´s legible que print ’me dijo ’hola’’
                a
              Puede haber caracteres especiales
              print "holanque tal"
              Cadenas crudas
              print r"""holanque tal"""




GSyC - 2010                                         Programaci´n en Python
                                                              o              22
Programaci´n en Python
                                    o              Cadenas




              Una cadena se puede expandir en m´s de una l´
                                               a          ınea
              print "hola
                     que tal "
              El operador + concatena cadenas, y el * las repite un n´mero
                                                                     u
              entero de veces
              Se puede acceder a los caracteres de cadenas mediante ´
                                                                    ındices
              y rodajas como en las listas
              Las cadenas son inmutables. Ser´ err´neo a[1]=...
                                             ıa o




GSyC - 2010                                         Programaci´n en Python
                                                              o               23
Programaci´n en Python
                                     o              Listas

 Listas

              Tipo de datos predefinido en Python, va mucho m´s all´ de
                                                            a     a
              los arrays
              Es un conjunto indexado de elementos, no necesariamente
              homog´neos
                    e
              Sintaxis:Identificador de lista, mas ´
                                                  ındice entre corchetes
              Cada elemento se separa del anterior por un car´cter ,
                                                             a
      a=[’rojo’,’amarillo’]
      a.append(’verde’)
      print a
      print a[2]
      print len(a)

      b=[’uno’,2, 3.0]




GSyC - 2010                                          Programaci´n en Python
                                                               o              24
Programaci´n en Python
                                     o              Listas




              El primer elemento tiene ´
                                       ındice 0.
              Un ´
                 ındice negativo accede a los elementos empezando por el
              final de la lista. El ultimo elemento tiene ´
                                   ´                     ındice -1.
              Pueden referirse rodajas (slices) de listas escribiendo dos
              ´
              ındices entre el car´cter :
                                  a
              La rodaja va desde el primero, incluido, al ultimo, excluido.
                                                          ´
              Si no aparece el primero, se entiende que empieza en el primer
              elemento (0)
              Si no aparece el segundo, se entiende que termina en el ultimo
                                                                      ´
              elemento (incluido).




GSyC - 2010                                          Programaci´n en Python
                                                               o               25
Programaci´n en Python
                                   o              Listas




      #!/usr/bin/python -tt
      a=[0,1,2,3,4]
      print a      # [0, 1, 2, 3, 4]
      print a[1]   # 1
      print a[0:2] # [0,1]
      print a[3:] # [3,4]
      print a[-1] # 4
      print a[:-1] # [0, 1, 2, 3]
      print a[:-2] # [0, 1, 2]


                    La misma sintaxis se aplica a las cadenas
      a="ni~o"
           n
      print a[-1]




GSyC - 2010                                        Programaci´n en Python
                                                             o              26
Programaci´n en Python
                                    o              Listas




              append() a˜ade un elemento al final de la lista
                        n
              insert() inserta un elemento en la posici´n indicada
                                                       o
      >>> li
      [’a’, ’b’, ’blablabla’, ’z’, ’example’]
      >>> li.append("new")
      >>> li
      [’a’, ’b’, ’blablabla’, ’z’, ’example’, ’new’]
      >>> li.insert(2, "new")
      >>> li
      [’a’, ’b’, ’new’, ’blablabla’, ’z’, ’example’, ’new’]




GSyC - 2010                                         Programaci´n en Python
                                                              o              27
Programaci´n en Python
                                     o              Listas




              index() busca en la lista un elemento y devuelve el ´  ındice de
              la primera aparici´n del elemento en la lista. Si no aparece se
                                o
              eleva una excepci´n.
                                o
              El operador in devuelve true si un elemento aparece en la
              lista, y false en caso contrario.
      >>> li
      [’a’, ’b’, ’new’, ’blablabla’, ’z’, ’example’, ’new’]
      >>> li.index("example")
      5
      >>> li.index("new")
      2
      >>> li.index("c")
      Traceback (innermost last):
        File "<interactive input>", line 1, in ?
      ValueError: list.index(x): x not in list
      >>> "c" in li
      0




GSyC - 2010                                          Programaci´n en Python
                                                               o                 28
Programaci´n en Python
                                     o              Listas



              remove() elimina la primera aparici´n de un elemento en la
                                                   o
              lista. Si no aparece, eleva una excepci´n.
                                                     o
              pop() devuelve el ultimo elemento de la lista, y lo elimina.
                                ´
              (Pila)
              pop(0) devuelve el primer elemento de la lista, y lo elimina.
              (Cola)
       >>> li
      [’a’, ’b’, ’new’, ’blablabla’, ’z’, ’example’, ’new’, ’two’, ’elements’]
      >>> li.remove("new")
      >>> li
      [’a’, ’b’, ’blablabla’, ’z’, ’example’, ’new’, ’two’, ’elements’]
      >>> li.remove("c")
      Traceback (innermost last):
        File "<interactive input>", line 1, in ?
      ValueError: list.remove(x): x not in list
      >>> li.pop()
      ’elements’
      >>> li
      [’a’, ’b’, ’blablabla’, ’z’, ’example’, ’new’, ’two’]


GSyC - 2010                                          Programaci´n en Python
                                                               o                 29
Programaci´n en Python
                                    o              Listas




              El operador + concatena dos listas, devolviendo una nueva
              lista
              El operador * concatena repetitivamente una lista a s´ misma
                                                                   ı
      >>> li = [’a’, ’b’, ’blablabla’]
      >>> li = li + [’example’, ’new’]
      >>> li
      [’a’, ’b’, ’blablabla’, ’example’, ’new’]
      >>> li += [’two’]
      >>> li
      [’a’, ’b’, ’blablabla’, ’example’, ’new’, ’two’]
      >>> li = [1, 2] * 3
      >>> li
      [1, 2, 1, 2, 1, 2]




GSyC - 2010                                         Programaci´n en Python
                                                              o              30
Programaci´n en Python
                                   o              Listas

 Inversi´n de una lista
        o




           El m´todo reverse() invierte las posiciones de los elementos
               e
           en una lista.
      No devuelve nada, simplemente altera la lista sobre la que se
      aplican.
      >>> a=[’sota’, ’caballo’, ’rey’]
      >>> a.reverse()
      >>> print a
      [’rey’, ’caballo’, ’sota’]




GSyC - 2010                                        Programaci´n en Python
                                                             o              31
Programaci´n en Python
                                     o              Listas

 Ordenar una lista


              La funci´n sorted() devuelve una lista ordenada (no la
                      o
              modifica)
              El m´todo sort() ordena una lista (Modifica la lista,
                  e
              devuelve None)
      Ambas admiten personalizar la ordenaci´n, pasando como
                                            o
      argumento una funci´n que compare dos elementos y devuelva
                         o
              Un valor negativo si est´n ordenados
                                      a
              Cero si son iguales
              Un valor positivo si est´n desordenados
                                      a




GSyC - 2010                                          Programaci´n en Python
                                                               o              32
Programaci´n en Python
                                 o              Listas




      #!/usr/bin/python -tt
      mi_lista=[ "gamma", "alfa", "beta"]

      print sorted(mi_lista)     # alfa, beta, gamma
      print mi_lista             # gamma, alfa, beta. No ha cambiado.

      print mi_lista.sort() # Devuelve ’None’
      print mi_lista          # alfa, beta, gamma. La ha ordenado




GSyC - 2010                                      Programaci´n en Python
                                                           o              33
Programaci´n en Python
                                 o              Listas




      #!/usr/bin/python -tt
      mi_lista=[ [’IV’,4] , [’XX’,20], [’III’,3]                 ]

      def mi_ordena(a,b):
          if a[1] < b[1]:
              return -1
          elif a[1] > b[1]:
              return 1
          else:
              return 0

      mi_lista.sort(mi_ordena)
      print mi_lista




GSyC - 2010                                      Programaci´n en Python
                                                           o              34
Programaci´n en Python
                                   o                Listas

 Split, join

      Es muy frecuente trocear una cadena para formar en un lista (split)
      y concatenar los elementos de una lista para formar una cadena
      (join)
      #!/usr/bin/python -tt
      mi_cadena="esto es una prueba"
      print mi_cadena.split() # [’esto’, ’es’, ’una’, ’prueba’]

      print "esto-tambien".split("-")             # [’esto’, ’tambien’]

      mi_lista=["as","dos","tres"]
      print mi_lista.join() # ¡ERROR! Parecer´a l´gico que join()
                                             ı   o
                            # fuera un m´todo del tipo lista. Pero no
                                        e
                            # lo es

      print "".join(mi_lista) # Es un m´todo del tipo string, hay
                                       e
                              # que invocarlo desde una cadena cualquiera.
                              # Devuelve "asdostres"




GSyC - 2010                                          Programaci´n en Python
                                                               o              35
Programaci´n en Python
                                   o              Listas

 Otros m´todos de los objetos string
        e


      #!/usr/bin/python -tt
      print "hola mundo".upper(); # HOLA MUNDO
      print "HOLA MUNDO".lower(); # hola mundo

      # Estos m´todos devuelven una cadena,
               e
      # sin modificar la cadena original
      a="prueba"
      print a.upper();            # PRUEBA
      print a;                    # prueba

      # find() indica la posici´n de una subcadena
                               o
      print "buscando una subcadena".find("una") # 9
      print "buscando una subcadena".find("nohay") # -1

      # strip() devuelve una copia de la cadena quitando
      # espacios a derecha e izda, retornos de carro, etc
      print "    hola n".strip() # ’hola’




GSyC - 2010                                        Programaci´n en Python
                                                             o              36
Programaci´n en Python
                                     o              Listas




      En las primeras versiones de python no hab´ m´todos para los
                                                  ıa e
      objetos de tipo string, se usaban funciones de un m´dulo string.
                                                         o
      A partir de python 2.x esta forma se va considerando obsoleta, en
      python 3.x desaparece
      #!/usr/bin/python -tt
      import string
      a="m´s vale p´jaro en mano"
          a         a
      print string.split(a)
      print string.upper(a)

      c=[’rojo’,’amarillo’,’verde’]
      print string.join(c)


              M´todos actuales para tratar cadenas: Built-in Types, String
               e
              Methods
              Funciones antiguas: String module



GSyC - 2010                                          Programaci´n en Python
                                                               o              37
Programaci´n en Python
                                        o              Listas

 Nombres de objeto
      Con frecuencia se habla de variables, porque es el t´rmino
                                                          e
      tradicional. Pero Python no tiene variables, sino nombres. Son
      referencias a objetos
      #!/usr/bin/python -tt
      x=[’uno’]
      y=x      # y apunta al mismo objeto
      print x # [’uno’]
      print y # [’uno’]

      x=[’dos’]    # x apunta a un nuevo objeto

      print x     # [’dos’]   # El objeto nuevo
      print y     # [’uno’]   # El objeto antiguo

      x=[’uno’]
      y=x      # y apunta al mismo objeto
      x.append(’dos’)   # modificamos el objeto
      print x # [’uno’,’dos’] # el objeto modificado
      print y # [’uno’,’dos’] # el mismo objeto, modificado


GSyC - 2010                                             Programaci´n en Python
                                                                  o              38
Programaci´n en Python
                                     o              Diccionarios

 Diccionarios



              Es un conjunto desordenado de elementos
              Cada elemento del diccionario es un par clave-valor.
              Se pueden obtener valores a partir de la clave, pero no al
              rev´s.
                 e
              Longitud variable
              Hace las veces de los registros en otros lenguajes
              Atenci´n: Se declaran con {}, se refieren con []
                    o




GSyC - 2010                                          Programaci´n en Python
                                                               o              39
Programaci´n en Python
                                     o              Diccionarios




              Asignar valor a una clave existente reemplaza el antiguo
              Una clave de tipo cadena es sensible a may´sculas/min´sculas
                                                        u          u
              Pueden a˜adirse entradas nuevas al diccionario
                      n
              Los diccionarios se mantienen desordenados
              Los valores de un diccionario pueden ser de cualquier tipo
              Las claves pueden ser enteros, cadenas y alg´n otro tipo
                                                          u
              Pueden borrarse un elemento del diccionario con del
              Pueden borrarse todos los elementos del diccionario con
              clear()




GSyC - 2010                                          Programaci´n en Python
                                                               o              40
Programaci´n en Python
                                       o              Diccionarios




      Otras operaciones con diccionarios:
              len(d)         devuelve el n´mero de elementos de d
                                          u
              d.has_key(k)   devuelve 1 si existe la clave k en d, 0 en caso contrario
              k in d         equivale a:        d.has_key(k)
              d.items()      devuelve la lista de elementos de d (pares clave:valor)
              d.keys()       devuelve la lista de claves de d




GSyC - 2010                                            Programaci´n en Python
                                                                 o                       41
Programaci´n en Python
                                   o              Diccionarios




      #!/usr/bin/python -tt
      pais={’de’: ’Alemania’, ’fr’: ’Francia’, ’es’: ’Espa~a’}
                                                          n
      print pais
      print pais["fr"]

      extension={}
      extension[’py’]=’python’
      extension[’txt’]=’texto plano’
      extension[’mp3’]=’MPEG layer 3’

      for x in pais.keys():
         print x, pais[x]

      del pais[’fr’]   # Borramos francia
      print len(pais) # Quedan 2 paises
      print pais.has_key(’es’) # True
      pais[’es’]="Spain" # modificamos un elemento
      pais.clear() # Borramos todas las claves




GSyC - 2010                                        Programaci´n en Python
                                                             o              42
Programaci´n en Python
                                 o              Diccionarios




      #!/usr/bin/python -tt

      diccionario={"juan": ["empanada"] ,
                   "maria": ["refrescos","vino"]}

      diccionario["luis"]=["patatas fritas","platos plastico"]
      diccionario["luis"].append("vasos plastico")

      claves=diccionario.keys()
      claves.sort()
      for clave in claves:
           print clave, diccionario[clave]


      Resultado de la ejecuci´n:
                             o
      juan [’empanada’]
      luis [’patatas fritas’, ’platos plastico’, ’vasos plastico’]
      maria [’refrescos’, ’vino’]


GSyC - 2010                                      Programaci´n en Python
                                                           o              43
Programaci´n en Python
                                   o              Tuplas

 Tuplas

      Tipo predefinido de Python para una lista inmutable.
      Se define de la misma manera, pero con los elementos entre
      par´ntesis.
         e
      Las tuplas no tienen m´todos: no se pueden a˜adir elementos, ni
                             e                     n
      cambiarlos, ni buscar con index().
      S´ puede comprobarse la existencia con el operador in.
       ı
      >>> t = ("a", "b", "blablabla", "z", "example")
      >>> t[0]
      ’a’
      >>> ’a’ in t
      1
      >>> t[0] = "b"
      Traceback (most recent call last):
        File "<stdin>", line 1, in ?
      TypeError: object doesn’t support item assignment




GSyC - 2010                                        Programaci´n en Python
                                                             o              44
Programaci´n en Python
                                     o              Tuplas




      Utilidad de las tuplas:
              Son m´s r´pidas que las listas
                   a a
              Pueden ser una clave de un diccionario (no as´ las listas)
                                                           ı
              Se usan en el formateo de cadenas
      tuple(li) devuelve una tupla con los elementos de la lista li
      list(t) devuelve una lista con los elementos de la tupla t




GSyC - 2010                                          Programaci´n en Python
                                                               o              45
Programaci´n en Python
                                        o              Tuplas

 Asignaciones m´ltiples y rangos
               u


              Pueden hacerse tambi´n tuplas de variables:
                                  e
              >>> v = (’a’, ’b’, ’e’)
              >>> (x, y, z) = v
              >>> x
              ’a’
              La funci´n range() permite generar listas al vuelo:
                      o
              >>>   range(7)
              [0,   1, 2, 3, 4, 5, 6]
              >>>   (MONDAY, TUESDAY, WEDNESDAY, THURSDAY,
              ...   FRIDAY, SATURDAY, SUNDAY) = range(7)
              >>>   MONDAY
              0
              >>>   SUNDAY
              6




GSyC - 2010                                             Programaci´n en Python
                                                                  o              46
Programaci´n en Python
                                    o              Cadenas Unicode

 Unicode en Python
      Hasta los a˜os 90, en pr´cticamente cualquier ´mbito de la
                 n             a                    a
      inform´tica, un car´cter equival´ a un byte. Pero empleando
             a           a            ıa
      alguna codificaci´n ASCII extendido, como UTF-8, esto ya no es
                       o
      cierto
      >>> pais={’es’:’espa~a’}
                           n
      >>> print pais
      {’es’: ’espaxc3xb1a’}
      >>> print pais[’es’]
      espa~a
          n


              xc3xb1 significa C3 en hexadecimal, B1 en hexadecimal
              (Letra e˜e en UTF-8)
                      n
              Cuando imprimimos el diccionario, se muestra la
              representaci´n interna de la e˜e
                          o                 n
              Cuando imprimimos la cadena, python muestra correctante el
              grafema correspondiente
GSyC - 2010                                         Programaci´n en Python
                                                              o              47
Programaci´n en Python
                                    o              Cadenas Unicode


              Cuando imprimimos la cadena completa, python la muestra
              correctamente
              Cuando imprimimos cada elemento, no
      #!/usr/bin/python -tt
      # -*- coding: utf-8 -*-
      cadena="¿Procesa bien el espa~ol?"
                                   n
      print cadena
      indice = 0
      while indice < len(cadena):
          letra = cadena[indice]
          print letra,
          indice=indice+1


      Resultado:
      ¿Procesa bien el espa~ol?
                           n
      ? ? P r o c e s a   b i e n            e l      e s p a ? ? o l ?


GSyC - 2010                                         Programaci´n en Python
                                                              o              48
Programaci´n en Python
                                    o              Cadenas Unicode

 Cadenas Unicode
              En python 2.0 aparecen las cadenas unicode
              Se crean anteponiendo u
              cadena_unicode=u"Con cadenas unicode se trabaja mejor en espa~ol"
                                                                           n

              Es un tipo muy similar a la cadena ordinaria de 8 bits, el
              int´rprete hace las conversiones autom´ticamente cuando es
                 e                                  a
              necesario
              Es recomendable que en todos nuestos scripts usemos cadenas
              unicode y no las tradicionales
      En el ejemplo anterior, basta con usar una cadena unicode para
      generar una salida correcta
      cadena=u"¿Procesa bien el espa~ol?"   n
      ¿Procesa bien el espa~ol?
                           n
      ¿ P r o c e s a   b i e n           e l      e s p a ~ o l ?
                                                           n


GSyC - 2010                                         Programaci´n en Python
                                                              o              49
Programaci´n en Python
                                 o              Cadenas Unicode




      Para escribir cadenas unicode en un fichero, hay que especificarlo
      en la apertura

      #!/usr/bin/python -tt
      # -*- coding: utf-8 -*
      import codecs

      fd=codecs.open("/tmp/test.txt",’w’,"utf-8")
      fd.write(u"texto en espa~oln")
                              n
      fd.close




GSyC - 2010                                      Programaci´n en Python
                                                           o              50
Programaci´n en Python
                                    o              Sentencias de control

 If




      #!/usr/bin/python -tt
      x = 3
      if x :
            print ’verdadero’
      else:
            print ’falso’


      N´tese como el car´cter : introduce cada bloque de sentencias.
       o                a




GSyC - 2010                                         Programaci´n en Python
                                                              o              51
Programaci´n en Python
                                   o              Sentencias de control

 For


      >>> a = [’cat’, ’window’, ’defenestrate’]
      >>> for x in a:
      ...     print x, len(x)
      ...
      cat 3
      window 6
      defenestrate 12
      >>> a = [’had’, ’a’, ’little’, ’lamb’]
      >>> for i in range(len(a)):
      ...     print i, a[i]
      ...
      0 had
      1 a
      2 little
      3 lamb




GSyC - 2010                                        Programaci´n en Python
                                                             o              52
Programaci´n en Python
                                   o              Sentencias de control




      #!/usr/bin/python -tt
      x = int(raw_input("Please enter an integer: "))
      if x < 0:
           x = 0
           print ’Negative changed to zero’
      elif x == 0:
           print ’Zero’
      elif x == 1:
           print ’Single’
      else:
           print ’More’


      No existe switch/case




GSyC - 2010                                        Programaci´n en Python
                                                             o              53
Programaci´n en Python
                                      o              Sentencias de control

 While




      >>> a=0
      >>> while a<10:
      ...     print a,
      ...     a=a+1
      ...
      0 1 2 3 4 5 6 7 8 9


      La coma el final de un print evita que se imprima un salto de
      p´gina
       a




GSyC - 2010                                           Programaci´n en Python
                                                                o              54
Programaci´n en Python
                                   o              Sentencias de control


      break sale de un bucle. (Aunque seg´n la programaci´n
                                         u               o
      estructurada, break no deber´ usarse nunca. Empl´alo solo si
                                  ıa                  e
      est´s muy seguro de lo que haces)
         a
      #!/usr/bin/python -tt
      a=10
      while a > 0:
          print a,
          a=a-1


      equivale a
      #!/usr/bin/python -tt
      a=10
      while 1:
          print a,
          if a==1:
               break
          a=a-1


      Sentencia nula: pass
      Valor nulo: None
GSyC - 2010                                        Programaci´n en Python
                                                             o              55
Programaci´n en Python
                                   o              Funciones

 Funciones




      #!/usr/bin/python -tt
      def a_centigrado(x):
          """Convierte grados farenheit en grados cent´grados."""
                                                      ı
          return (x-32)*(5/9.0)


      def a_farenheit(x):
          """Convierte grados cent´grados en grados farenheit."""
                                  ı
          return (x*1.8)+32




GSyC - 2010                                        Programaci´n en Python
                                                             o              56
Programaci´n en Python
                                      o              Funciones



              Los nombres de objeto declarados fuera de una funci´n son
                                                                 o
              globales
      #!/usr/bin/python -tt
      c=3
      def f(x):
          return c+x

      print f(5)      # 8
      print c         # 3


              Los objetos declarados dentro de una funci´n son locales
                                                        o
      #!/usr/bin/python -tt
      def f(x):
          c=3
          return c+x

      print f(5)
      print c    # ERROR: c es de ´mbito local
                                  a


GSyC - 2010                                           Programaci´n en Python
                                                                o              57
Programaci´n en Python
                                     o              Funciones




              Los objetos inmutables (enteros, cadenas, tuplas...) no se
              pueden modificar dentro de una funci´n. (Porque se crea una
                                                   o
              objeto distinto, local)
      #!/usr/bin/python -tt
      c=3
      def f(x):
          c=0
          return c+x

      print f(5)     # 5
      print c        # 3




GSyC - 2010                                          Programaci´n en Python
                                                               o              58
Programaci´n en Python
                                   o              Funciones




      #!/usr/bin/python -tt
      c=3
      def f(x):
          c=c-1    #ERROR: la variable local a´n no est´ definida
                                              u        a
          return c+x

      print f(5)




GSyC - 2010                                        Programaci´n en Python
                                                             o              59
Programaci´n en Python
                                    o              Funciones




              A menos que se use la sentencia global
      #!/usr/bin/python -tt
      c=3
      def f(x):
          global c   #permite modificar un objeto global
          c=c-1
          return c+x

      print f(5)     #7
      print c        #2




GSyC - 2010                                         Programaci´n en Python
                                                              o              60
Programaci´n en Python
                                      o              Funciones




      Los objetos mutables (listas, diccionarios...) declarados dentro de
      una funci´n tambi´n son locales
               o       e
      #!/usr/bin/python -tt

      l= ["uno","dos"]
      c=3
      def f():
          l=["cuatro"]     # nuevo objeto, local
          c=5              # nuevo objeto, local


      print   l #   ["uno","dos"]
      print   c #   3
      f()
      print   l #   ["uno","dos"]
      print   c #   3




GSyC - 2010                                           Programaci´n en Python
                                                                o              61
Programaci´n en Python
                                        o              Funciones




      Pero un objeto mutable s´ puede modificarse dentro de un funci´n,
                               ı                                   o
      y el objeto global queda modificado
      #!/usr/bin/python -tt

      l= ["uno","dos"]
      c=3
      def f():
          l.pop()   # El objeto global
          c=c-5     # ERROR!

      print   l #   ["uno","dos"]
      print   c #   3
      f()
      print   l #   ["uno"]   # El objeto global fue modificado
      print   c #   3




GSyC - 2010                                             Programaci´n en Python
                                                                  o              62
Programaci´n en Python
                                     o              Ficheros

 Ficheros

              open(nombre_fichero,modo) devuelve un objeto fichero.
              modo:
                  w: Escritura. Destruye contenido anterior
                  r: Lectura. Modo por defecto
                  r+: Lectura y escritura
                  a: Append
              write(cadena) escribe la cadena en el fichero. Solo escribe
              cadenas, para otros tipos, es necesario pasar a texto o usar
              librer´ pickle
                    ıa
              read() devuelve una cadena con todo el contenido del fichero
              readlines() devuelve una lista donde cada elemento es una
              l´
               ınea del fichero
              close() cierra el fichero


GSyC - 2010                                          Programaci´n en Python
                                                               o              63
Programaci´n en Python
                                   o              Ficheros




      lista=[’sota’,’caballo’,’rey’]
      fichero=open(’prueba.txt’,’w’)
      for x in lista:
          fichero.write(x+"n")
      fichero.close()

      fichero=open(’prueba.txt’,’r’)
      mi_cadena=fichero.read()
      fichero.seek(0)                        # vuelvo al princio del fichero

      lista_de_cadenas=fichero.readlines()        # ahora cada elemnto incluye n
      fichero.seek(0)

      for linea in fichero.readlines():
          print linea,

      fichero.close()




GSyC - 2010                                        Programaci´n en Python
                                                             o                      64
Programaci´n en Python
                                   o              Ficheros




      Los m´todos read() y readlines() crean una copia completa del
            e
      fichero en memoria.
      Para ficheros muy grandes es m´s eficiente trabajar l´
                                     a                   ınea a l´
                                                                 ınea
      fichero=open(’prueba.txt’,’r’)
      for linea in fichero:
          print linea,
      fichero.close()



      No se deben mezclar estas dos maneras de acceder a un fichero




GSyC - 2010                                        Programaci´n en Python
                                                             o              65
Programaci´n en Python
                                       o              Cadenas de documentaci´n
                                                                            o

 Cadenas de documentaci´n
                       o


              No son obligatorias pero s´ muy recomendables (varias herramientas
                                        ı
              hacen uso de ellas).
              La cadena de documentaci´n de un objeto es su atributo __doc__
                                      o
              En una sola l´
                           ınea para objetos sencillos, en varias para el resto de
              los casos.
              Entre triples comillas-dobles (incluso si ocupan una l´
                                                                    ınea).
              Si hay varias l´
                             ıneas:
                   La primera l´ınea debe ser una resumen breve del prop´sito del
                                                                          o
                   objeto. Debe empezar con may´scula y acabar con un punto
                                                   u
                   Una l´ınea en blanco debe separar la primera l´
                                                                 ınea del resto
                   Las siguientes l´
                                   ıneas deber´ empezar justo debajo de la
                                              ıan
                   primera comilla doble de la primera l´
                                                        ınea



GSyC - 2010                                            Programaci´n en Python
                                                                 o                   66
Programaci´n en Python
                                     o              Cadenas de documentaci´n
                                                                          o



      De una sola l´
                   ınea:
      def kos_root():
          """Return the pathname of the KOS root directory."""
          global _kos_root
          ...

      De varias:
      def complex(real=0.0, imag=0.0):
          """Form a complex number.

              Keyword arguments:
              real -- the real part (default 0.0)
              imag -- the imaginary part (default 0.0)

              """
              if imag == 0.0 and real == 0.0: return complex_zero


GSyC - 2010                                          Programaci´n en Python
                                                               o               67
Programaci´n en Python
                                     o              Cadenas de documentaci´n
                                                                          o

 Documentando el c´digo (tipo Javadoc)
                  o




              Permite documentar el c´digo -generalmente las funciones- dentro
                                     o
              del propio c´digo
                          o
              Genera la documentaci´n del c´digo en formatos legibles y
                                   o       o
              navegables (HTML, PDF...)
              Se basa en un lenguaje de marcado simple
              PERO... hay que mantener la documentaci´n al d´ cuando se
                                                     o      ıa
              cambia el c´digo
                         o




GSyC - 2010                                          Programaci´n en Python
                                                               o                 68
Programaci´n en Python
                                    o              Cadenas de documentaci´n
                                                                         o




      Ejemplo

      def interseccion(m, b):
        """
        Devuelve la interseccion de la curva M{y=m*x+b} con el eje X.
        Se trata del punto en el que la curva cruza el eje X (M{y=0}).

         @type    m:   n´mero
                        u
         @param   m:   La pendiente de la curva
         @type    b:   n´mero
                        u
         @param   b:   La intersecci´n con el eje Y
                                    o

         @rtype:   n´mero
                    u
         @return: la intersecc´oin con el eje X de la curva M{y=m*x+b}
                              ı
         """
         return -b/m



GSyC - 2010                                         Programaci´n en Python
                                                              o               69
Programaci´n en Python
                                    o              Excepciones

 Excepciones




              Un programa sint´cticamente correcto puede dar errores de
                              a
              ejecuci´n
                     o

      #!/usr/bin/python -tt
      while 1:
          x=int(raw_input("Introduce un no "))
          print x




GSyC - 2010                                         Programaci´n en Python
                                                              o              70
Programaci´n en Python
                                    o              Excepciones




              Definimos una acci´n para determinada excepci´n
                               o                          o

      #!/usr/bin/python -tt
      while 1:
          try:
               x=int(raw_input("Introduce un no :"))
               print x
          except ValueError:
               print ("N´mero incorrecto")
                        u




GSyC - 2010                                         Programaci´n en Python
                                                              o              71
Programaci´n en Python
                                    o              Excepciones




              Se puede indicar una acci´n para cualquier excepci´n
                                       o                        o
              pero es muy desaconsejable (enmascara otros errores)
              El programador puede levantar excepciones

      #!/usr/bin/python -tt
      try:
          x=int(raw_input("Introduce un no :"))
          print x
      except :     # para cualquier excepci´n
                                            o
          print ("N´mero incorrecto")
                   u

      raise SystemExit   # Excepci´n para finalizar programa
                                  o
      print "Esta l´nea nunca se ejecuta"
                   ı




GSyC - 2010                                         Programaci´n en Python
                                                              o              72
Librer´
                                             ıas   Librer´ commands
                                                         ıa

 getstatusoutput



              commands.getstatusoutput permite usar mandatos de la
              shell desde python
              Ejecuta una shell, pas´ndole su argumento como stdin
                                    a
              Devuelve una lista dos elementos
                1   El valor status devuelto por el mandato
                2   Una concatenaci´n de stdout y stderr
                                     o

      #!/usr/bin/python -tt
      import commands
      a=commands.getstatusoutput("ls /")
      print a[1]




GSyC - 2010                                         Programaci´n en Python
                                                              o              73
Librer´
                                       ıas   Librer´ commands
                                                   ıa



      La salida del mandato es una unica cadena. Para procesarla l´
                                   ´                              ınea a
      l´
       ınea, usamos split

      #!/usr/bin/python -tt
      # -*- coding: utf-8 -*-
      import commands,sys
      mandato="ps -ef"
      a=commands.getstatusoutput(mandato)
      if a[0] != 0:       # si el mandato tiene ´xito, el status es 0
                                                e
          sys.stderr.write("La orden ’"+mandato+"’ ha producido un errorn")
          raise SystemExit

      lineas=a[1].split("n") # troceamos la salida l´nea a l´nea
                                                      ı       ı
      lineas.pop(0)      # quitamos la primera l´nea, la cabecera del ps
                                                ı
      for linea in lineas:
          campos_linea=linea.split()
          print "Usuario:"+ campos_linea[0],
          print "Proceso:"+ campos_linea[7]




GSyC - 2010                                   Programaci´n en Python
                                                        o                  74
Librer´
                                         ıas   Librer´ sys
                                                     ıa




              Argumentos de linea de ´rdenes
                                     o
      sys.argv devuelve una lista con los argumentos pasados al script
      python desde la shell
      koji@mazinger:~$ cat ejemplo.py
      #!/usr/bin/python -tt
      import sys
      print sys.argv[1:]

      koji@mazinger:~$ ./ejemplo.py un_argumento otro_argumento
      [’un_argumento’, ’otro_argumento’]




GSyC - 2010                                     Programaci´n en Python
                                                          o              75
Librer´
                                            ıas   Librer´ sys
                                                        ıa




      Escribir en stderr
      #!/usr/bin/python -tt
      import sys
      sys.stderr.write(’Error: n’)

      Leer desde stdin, escribir en stdout

      #!/usr/bin/python -tt
      import sys
      for linea in sys.stdin.readlines():
          sys.stdout.write(linea)




GSyC - 2010                                        Programaci´n en Python
                                                             o              76
Librer´
                                           ıas   Librer´ os, shutil
                                                       ıas

 os.path

              Las funciones os.path.join() y os.path.split() unen y separan
              nombres de fichero con directorios
                  Son compatibles con cualquier S.O.
                  No importa si el path acaba en barra o no
              os.path.exists() devuelve un boolean indicando si un
              fichero existe
      #!/usr/bin/python -tt
      import os
      ejemplo=os.path.join("/etc/apt","sources.list")
      print ejemplo    # /etc/apt/sources.list
      print os.path.split(ejemplo)   # (’/etc/apt’, ’sources.list’)

      print os.path.exists(ejemplo)
      print os.path.exists("/usr/local/noexiste")




GSyC - 2010                                       Programaci´n en Python
                                                            o                 77
Librer´
                                         ıas   Librer´ os, shutil
                                                     ıas

 Enlazar, borrar



      #!/usr/bin/python -tt
      import os
      if not os.path.exists("/tmp/aa"):
          os.mkdir("/tmp/aa")
      os.chdir("/tmp/aa")             # cd /tmp/aa
      os.link("/etc/hosts","hosts")   # crea enlace duro
      os.symlink("/etc/hosts","enlace_hosts") # crea enlace blando
      os.remove("enlace_duro_hosts")          # borra el fichero
      os.remove("enlace_hosts")               # borra el fichero
      os.rmdir("/tmp/aa")               # borra directorio (vacio)




GSyC - 2010                                     Programaci´n en Python
                                                          o              78
Librer´
                                         ıas   Librer´ os, shutil
                                                     ıas

 copiar, copiar y borrar recursivamente



      #!/usr/bin/python -tt
      import shutil,os
      shutil.copytree("/home/koji/.gnome","/tmp/probando")
          # copia recursivamente. El destino no debe existir

      shutil.copy("/etc/hosts","/tmp/probando")
          # copia 1 fichero (como el cp de bash)

      shutil.move("/tmp/probando/hosts","/tmp/probando/mi_hosts")

      shutil.rmtree("/tmp/probando")
          # borra arbol lleno




GSyC - 2010                                     Programaci´n en Python
                                                          o              79
Librer´
                                           ıas   Librer´ os, shutil
                                                       ıas

 os.walk

              Recorre recursivamente un directorio
              Por cada directorio devuelve una 3-tupla
                  Directorio
                  Subdirectorios
                  Ficheros

      #!/usr/bin/python -tt
      import os
      directorio_inicial=os.getcwd() # current working directory
      os.chdir("/tmp/musica")        # cd

      for x in os.walk("."):
          print x

      os.chdir(directorio_inicial)




GSyC - 2010                                       Programaci´n en Python
                                                            o              80
Librer´
                                          ıas   Librer´ os, shutil
                                                      ıas




      /tmp/musica
      |-- listado.txt
      |-- jazz
      ‘-- pop
          |-- sabina
          |    |-- pirata_cojo.mp3
          |    ‘-- princesa.mp3
          ‘-- serrat
               |-- curro_el_palmo.mp3
               ‘-- penelope.mp3


      (’.’, [’jazz’, ’pop’], [’listado.txt’])
      (’./jazz’, [], [])
      (’./pop’, [’serrat’, ’sabina’], [])
      (’./pop/serrat’, [], [’curro_el_palmo.mp3’, ’penelope.mp3’])
      (’./pop/sabina’, [], [’princesa.mp3’, ’pirata_cojo.mp3’])




GSyC - 2010                                      Programaci´n en Python
                                                           o              81
Librer´
                                         ıas   Librer´ os, shutil
                                                     ıas

 Variables de entorno




      #!/usr/bin/python -tt
      import os, sys
      mi_variable=os.getenv("MI_VARIABLE")
      if mi_variable==None:
              msg="ERROR: variable de entorno MI_VARIABLE no definida"
              sys.stderr.write(msg+’n’)
              raise SystemExit




GSyC - 2010                                     Programaci´n en Python
                                                          o              82
Librer´
                                           ıas   Librer´ pickle: Persistencia
                                                       ıas

 Persistencia




      Persistencia en Python: La librer´ Pickle
                                       ıa
      Serializa Objetos
      Permite:
              Transmitir objetos, almacenarlos en Disco ´ SGBD
                                                        o
              Compartir objetos
              Clases definidas por el usuario y sus instancias




GSyC - 2010                                       Programaci´n en Python
                                                            o                   83
Librer´
                                         ıas   Librer´ pickle: Persistencia
                                                     ıas




      #!/usr/bin/python -tt
      import pickle

      cp={28:’madrid’,08:’barcelona’,33:’asturias’}
      fich=open(’prueba.pick’,’w’)
      pickle.dump(cp,fich)
      fich.close()

      fich=open(’prueba.pick’,’r’)
      codigos_postales=pickle.load(fich)
      fich.close()

      for x in codigos_postales.keys():
          print x,codigos_postales[x]




GSyC - 2010                                     Programaci´n en Python
                                                          o                   84

More Related Content

What's hot

Clase 1 Curso Introducción a Python 2012
Clase 1 Curso Introducción a Python 2012Clase 1 Curso Introducción a Python 2012
Clase 1 Curso Introducción a Python 2012Nahuel Defossé
 
Sesión 1: Python
Sesión 1: PythonSesión 1: Python
Sesión 1: Pythonmaluacsa
 
Exposición Python
Exposición PythonExposición Python
Exposición Pythondavidare
 
Clase 4/4 Curso Introducción a Python 2012
Clase 4/4 Curso Introducción a Python 2012Clase 4/4 Curso Introducción a Python 2012
Clase 4/4 Curso Introducción a Python 2012Nahuel Defossé
 
Transparencias taller Python
Transparencias taller PythonTransparencias taller Python
Transparencias taller PythonSergio Soto
 
Clase 2/4 Curso Introducción a Python 2012
Clase 2/4 Curso Introducción a Python 2012Clase 2/4 Curso Introducción a Python 2012
Clase 2/4 Curso Introducción a Python 2012Nahuel Defossé
 
Python (Lenguaje de Programación)
Python (Lenguaje de Programación)Python (Lenguaje de Programación)
Python (Lenguaje de Programación)Ricardo Muñiz
 

What's hot (9)

Semana 2 Fundamentos de Python(Variables)
Semana 2   Fundamentos de Python(Variables)Semana 2   Fundamentos de Python(Variables)
Semana 2 Fundamentos de Python(Variables)
 
Clase 1 Curso Introducción a Python 2012
Clase 1 Curso Introducción a Python 2012Clase 1 Curso Introducción a Python 2012
Clase 1 Curso Introducción a Python 2012
 
Sesión 1: Python
Sesión 1: PythonSesión 1: Python
Sesión 1: Python
 
Clase4_Python-CTIC
Clase4_Python-CTICClase4_Python-CTIC
Clase4_Python-CTIC
 
Exposición Python
Exposición PythonExposición Python
Exposición Python
 
Clase 4/4 Curso Introducción a Python 2012
Clase 4/4 Curso Introducción a Python 2012Clase 4/4 Curso Introducción a Python 2012
Clase 4/4 Curso Introducción a Python 2012
 
Transparencias taller Python
Transparencias taller PythonTransparencias taller Python
Transparencias taller Python
 
Clase 2/4 Curso Introducción a Python 2012
Clase 2/4 Curso Introducción a Python 2012Clase 2/4 Curso Introducción a Python 2012
Clase 2/4 Curso Introducción a Python 2012
 
Python (Lenguaje de Programación)
Python (Lenguaje de Programación)Python (Lenguaje de Programación)
Python (Lenguaje de Programación)
 

Viewers also liked

Curso de Nivelación de Algoritmos - Clase 2
Curso de Nivelación de Algoritmos - Clase 2Curso de Nivelación de Algoritmos - Clase 2
Curso de Nivelación de Algoritmos - Clase 2Ernesto Mislej
 
Inmersión en Python 3.0.11
Inmersión en Python 3.0.11Inmersión en Python 3.0.11
Inmersión en Python 3.0.11Erik Gur
 
Algoritmos programacion-python
Algoritmos programacion-pythonAlgoritmos programacion-python
Algoritmos programacion-pythonLUIS COAQUIRA
 
Practica repaso 1 3-2
Practica repaso 1 3-2Practica repaso 1 3-2
Practica repaso 1 3-2Jorge Gamez
 
Practica repaso 4 5 2da
Practica repaso 4 5 2daPractica repaso 4 5 2da
Practica repaso 4 5 2daJorge Gamez
 
Python y la POO, en una clase, UNNe-Corrientes
Python y la POO, en una clase, UNNe-CorrientesPython y la POO, en una clase, UNNe-Corrientes
Python y la POO, en una clase, UNNe-Corrientesalexis ibarra
 
Clase 6 excepciones
Clase 6   excepcionesClase 6   excepciones
Clase 6 excepcionesJorge Gamez
 
Lección No. 1 de Python
Lección No. 1 de PythonLección No. 1 de Python
Lección No. 1 de PythonVictor Pando
 
Cuentas usuarios grupos LINUX
Cuentas usuarios grupos LINUXCuentas usuarios grupos LINUX
Cuentas usuarios grupos LINUXjuanhuapaya
 
Algoritmos y Lenguaje de Programación - Ejercicios de: case
Algoritmos y Lenguaje de Programación - Ejercicios de: caseAlgoritmos y Lenguaje de Programación - Ejercicios de: case
Algoritmos y Lenguaje de Programación - Ejercicios de: caseNianko Madara
 
Revista Linux Latino No.1
Revista Linux Latino No.1Revista Linux Latino No.1
Revista Linux Latino No.1wozgeass
 
Video y Multimedia
Video y MultimediaVideo y Multimedia
Video y MultimediaVictor Pando
 

Viewers also liked (20)

Curso de Nivelación de Algoritmos - Clase 2
Curso de Nivelación de Algoritmos - Clase 2Curso de Nivelación de Algoritmos - Clase 2
Curso de Nivelación de Algoritmos - Clase 2
 
Inmersión en Python 3.0.11
Inmersión en Python 3.0.11Inmersión en Python 3.0.11
Inmersión en Python 3.0.11
 
Algoritmos programacion-python
Algoritmos programacion-pythonAlgoritmos programacion-python
Algoritmos programacion-python
 
Practica repaso 1 3-2
Practica repaso 1 3-2Practica repaso 1 3-2
Practica repaso 1 3-2
 
Practica repaso 4 5 2da
Practica repaso 4 5 2daPractica repaso 4 5 2da
Practica repaso 4 5 2da
 
Python05
Python05Python05
Python05
 
Python03
Python03Python03
Python03
 
Python02
Python02Python02
Python02
 
Python04
Python04Python04
Python04
 
Linux02
Linux02Linux02
Linux02
 
Python y la POO, en una clase, UNNe-Corrientes
Python y la POO, en una clase, UNNe-CorrientesPython y la POO, en una clase, UNNe-Corrientes
Python y la POO, en una clase, UNNe-Corrientes
 
Clase1
Clase1Clase1
Clase1
 
Clase 6 excepciones
Clase 6   excepcionesClase 6   excepciones
Clase 6 excepciones
 
Lección No. 1 de Python
Lección No. 1 de PythonLección No. 1 de Python
Lección No. 1 de Python
 
Cuentas usuarios grupos LINUX
Cuentas usuarios grupos LINUXCuentas usuarios grupos LINUX
Cuentas usuarios grupos LINUX
 
Folleto de ejemplos_programacion_xo
Folleto de ejemplos_programacion_xoFolleto de ejemplos_programacion_xo
Folleto de ejemplos_programacion_xo
 
Algoritmos y Lenguaje de Programación - Ejercicios de: case
Algoritmos y Lenguaje de Programación - Ejercicios de: caseAlgoritmos y Lenguaje de Programación - Ejercicios de: case
Algoritmos y Lenguaje de Programación - Ejercicios de: case
 
Revista Linux Latino No.1
Revista Linux Latino No.1Revista Linux Latino No.1
Revista Linux Latino No.1
 
GNU/Linux-Debian
GNU/Linux-Debian GNU/Linux-Debian
GNU/Linux-Debian
 
Video y Multimedia
Video y MultimediaVideo y Multimedia
Video y Multimedia
 

Similar to Python i

Parallel python sistemas operativos avanzados
Parallel python sistemas operativos avanzadosParallel python sistemas operativos avanzados
Parallel python sistemas operativos avanzadosDaniel Muccela
 
python-para-todos.pdf
python-para-todos.pdfpython-para-todos.pdf
python-para-todos.pdfJaviMartin21
 
Python para todos
Python para todosPython para todos
Python para todosErik Gur
 
python-para-todos.pdf
python-para-todos.pdfpython-para-todos.pdf
python-para-todos.pdfRafalJMalave
 
Python para todos
Python para todosPython para todos
Python para todossebas145713
 
Python_para_todos.pdf
Python_para_todos.pdfPython_para_todos.pdf
Python_para_todos.pdfssuser626fe4
 
Aprende más sobre Python
Aprende más sobre PythonAprende más sobre Python
Aprende más sobre PythonSoftware Guru
 
Programacion orientada a objetos python manuel casado martín - universidad ...
Programacion orientada a objetos python   manuel casado martín - universidad ...Programacion orientada a objetos python   manuel casado martín - universidad ...
Programacion orientada a objetos python manuel casado martín - universidad ...Wilson Bautista
 
Introducción a Python
Introducción a Python Introducción a Python
Introducción a Python Eddie Malca
 
Programas para programar
Programas para programarProgramas para programar
Programas para programardiazbasico
 
programa curso python 2022.pdf
programa curso python 2022.pdfprograma curso python 2022.pdf
programa curso python 2022.pdfPabloMendivil
 
Trabajo de python
Trabajo de pythonTrabajo de python
Trabajo de pythonEdgar Lemus
 
El tutorial PYTHON EMERSON EDUARDO RODRIGUES
El tutorial PYTHON  EMERSON EDUARDO RODRIGUESEl tutorial PYTHON  EMERSON EDUARDO RODRIGUES
El tutorial PYTHON EMERSON EDUARDO RODRIGUESEMERSON EDUARDO RODRIGUES
 

Similar to Python i (20)

Parallel python sistemas operativos avanzados
Parallel python sistemas operativos avanzadosParallel python sistemas operativos avanzados
Parallel python sistemas operativos avanzados
 
Tipo de Aplicaciones
Tipo de AplicacionesTipo de Aplicaciones
Tipo de Aplicaciones
 
python-para-todos.pdf
python-para-todos.pdfpython-para-todos.pdf
python-para-todos.pdf
 
Python para todos
Python para todosPython para todos
Python para todos
 
Python para Todos
Python para TodosPython para Todos
Python para Todos
 
python-para-todos.pdf
python-para-todos.pdfpython-para-todos.pdf
python-para-todos.pdf
 
Python para todos
Python para todosPython para todos
Python para todos
 
Libro python para todos
Libro   python para todosLibro   python para todos
Libro python para todos
 
Python para todos
Python para todosPython para todos
Python para todos
 
Python_para_todos.pdf
Python_para_todos.pdfPython_para_todos.pdf
Python_para_todos.pdf
 
Python_para_todos.pdf
Python_para_todos.pdfPython_para_todos.pdf
Python_para_todos.pdf
 
Aprende más sobre Python
Aprende más sobre PythonAprende más sobre Python
Aprende más sobre Python
 
Programacion orientada a objetos python manuel casado martín - universidad ...
Programacion orientada a objetos python   manuel casado martín - universidad ...Programacion orientada a objetos python   manuel casado martín - universidad ...
Programacion orientada a objetos python manuel casado martín - universidad ...
 
Aprendamos python
Aprendamos pythonAprendamos python
Aprendamos python
 
Introducción a Python
Introducción a Python Introducción a Python
Introducción a Python
 
Programas para programar
Programas para programarProgramas para programar
Programas para programar
 
programa curso python 2022.pdf
programa curso python 2022.pdfprograma curso python 2022.pdf
programa curso python 2022.pdf
 
Trabajo de python
Trabajo de pythonTrabajo de python
Trabajo de python
 
El tutorial PYTHON EMERSON EDUARDO RODRIGUES
El tutorial PYTHON  EMERSON EDUARDO RODRIGUESEl tutorial PYTHON  EMERSON EDUARDO RODRIGUES
El tutorial PYTHON EMERSON EDUARDO RODRIGUES
 
Tutorial python2
Tutorial python2Tutorial python2
Tutorial python2
 

More from Jorge Gamez

More from Jorge Gamez (15)

Practica repaso pilas y colas con archivos
Practica repaso pilas y colas   con archivosPractica repaso pilas y colas   con archivos
Practica repaso pilas y colas con archivos
 
Practica repaso pilas y colas
Practica repaso pilas y colasPractica repaso pilas y colas
Practica repaso pilas y colas
 
Practica 5
Practica  5Practica  5
Practica 5
 
Practica 4
Practica  4Practica  4
Practica 4
 
Practica 3
Practica  3Practica  3
Practica 3
 
Practica 2
Practica  2Practica  2
Practica 2
 
Practica 1
Practica  1Practica  1
Practica 1
 
Practica repaso 1 3-2
Practica repaso 1 3-2Practica repaso 1 3-2
Practica repaso 1 3-2
 
Clase5
Clase5Clase5
Clase5
 
Clase4
Clase4Clase4
Clase4
 
Clase3
Clase3Clase3
Clase3
 
Clase2
Clase2Clase2
Clase2
 
Clase archivos
Clase   archivosClase   archivos
Clase archivos
 
2 da clase la ingeniería
2 da clase  la ingeniería2 da clase  la ingeniería
2 da clase la ingeniería
 
Presentación clase 3
Presentación clase 3Presentación clase 3
Presentación clase 3
 

Python i

  • 1. Programaci´n en Python o Departamento de Sistemas Telem´ticos y Computaci´n (GSyC) a o gsyc-profes (arroba) gsyc.es Marzo de 2010 GSyC - 2010 Programaci´n en Python o 1
  • 2. c 2010 GSyC Algunos derechos reservados. Este trabajo se distribuye bajo la licencia Creative Commons Attribution Share-Alike 3.0 GSyC - 2010 Programaci´n en Python o 2
  • 3. Contenidos 1 El Lenguaje Python 2 Programaci´n en Python o Tipos de objeto Cadenas Listas Diccionarios Tuplas Cadenas Unicode Sentencias de control Funciones Ficheros Cadenas de documentaci´n o Excepciones 3 Librer´ ıas Librer´ commands ıa Librer´ sys ıa Librer´ os, shutil ıas GSyC - 2010 Programaci´n en Python o 3
  • 4. El Lenguaje Python El Lenguaje Python Lenguaje de autor creado por Guido van Rossum en 1989 Muy relacionado originalmente con el S.O. Amoeba Disponible en Unix, Linux, MacOS, Windows, Libre Lenguaje de Script Orientado a Objetos (no muy puro) Muy alto nivel Librer´ muy completa ıa GSyC - 2010 Programaci´n en Python o 4
  • 5. El Lenguaje Python Verdadero lenguaje de prop´sito general o Sencillo, compacto Sintaxis clara Interpretado => Lento Ofrece persistencia Recolector de basuras Muy maduro y muy popular Aplicable para software de uso general GSyC - 2010 Programaci´n en Python o 5
  • 6. El Lenguaje Python Programa python for x in xrange(1000000): print x Su equivalente Java public class ConsoleTest { public static void main(String[] args) { for (int i = 0; i < 1000000; i++) { System.out.println(i); } } } GSyC - 2010 Programaci´n en Python o 6
  • 7. El Lenguaje Python Programa python for i in xrange(1000): x={} for j in xrange(1000): x[j]=i x[j] Su equivalente Java import java.util.Hashtable; public class HashTest { public static void main(String[] args) { for (int i = 0; i < 1000; i++) { Hashtable x = new Hashtable(); for (int j = 0; j < 1000; j++) { x.put(new Integer(i), new Integer(j)); x.get(new Integer(i)); } } } } GSyC - 2010 Programaci´n en Python o 7
  • 8. El Lenguaje Python Librer´ ıas Python dispone de librer´ Nativas y Normalizadas para ıas Cadenas, listas, tablas hash, pilas, colas N´meros Complejos u Serializaci´n, Copia profunda y Persistencia de Objetos o Regexp Unicode, Internacionalizaci´n del Software o Programaci´n Concurrente o Acceso a BD, Ficheros Comprimidos, Control de Cambios... GSyC - 2010 Programaci´n en Python o 8
  • 9. El Lenguaje Python Librer´ relacionadas con Internet: ıas CGIs, URLs, HTTP, FTP, pop3, IMAP, telnet Cookies, Mime, XML, XDR Diversos formatos multimedia Criptograf´ ıa GSyC - 2010 Programaci´n en Python o 9
  • 10. El Lenguaje Python La referencia sobre todas las funciones de librer´ podemos ıa encontrarlas en la documentaci´n oficial, disponible en el web en o muchos formatos Hasta la versi´n 2.5.4 (diciembre de 2008), se denomina o python library reference Desde la versi´n 2.6, se denomina python standard library o GSyC - 2010 Programaci´n en Python o 10
  • 11. El Lenguaje Python Inconvenientes de Python Adem´s de su velocidad limitada y necesidad de int´rprete a e (Como todo lenguaje interpretado) No siempre compatible hacia atr´s a Uniformidad. Ej: funci´n len(), m´todo o e items() Algunos aspectos de la OO Python is a hybrid language. It has functions for procedural programming and objects for OO programming. Python bridges the two worlds by allowing functions and methods to interconvert using the explicit “self” parameter of every method def. When a function is inserted into an object, the first argument automagically becomes a reference to the receiver. ... GSyC - 2010 Programaci´n en Python o 11
  • 12. Programaci´n en Python o El int´rprete de python se puede usar e En modo interactivo koji@mazinger:~$ python Python 2.5.2 (r252:60911, Oct 5 2008, 19:24:49) [GCC 4.3.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> print "hola mundo" hola mundo >>> 3/2 1 >>> 3/2.0 1.5 Mediante scripts #!/usr/bin/python -tt print "hola mundo" #esto es un comentario euros=415 pesetas=euros*166.386 print str(euros) + " euros son "+ str(pesetas) + " pesetas" GSyC - 2010 Programaci´n en Python o 12
  • 13. Programaci´n en Python o La l´ınea #!/usr/bin/python indica al S.O. d´nde est´ el o a int´rprete que sabe procesar el fuente e Debe ser exactamente la primera l´ ınea No puede haber espacios entre la admiraci´n y la barra o #Este ejemplo es doblemente incorrecto #! /usr/bin/python -tt # ¡MAL! En distintos Unix el int´rprete puede estar en distintos sitios. Para e aumentar la compatibilidad, a veces se usa #!/usr/bin/env python print "Hola mundo" Aunque (en Linux) esto no permite pasar par´metros como -tt a GSyC - 2010 Programaci´n en Python o 13
  • 14. Programaci´n en Python o Operadores En orden de precedencia decreciente: +x, -x, ~x Unary operators x ** y Power x * y, x / y, x % y Multiplication, division, modulo x + y, x - y Addition, subtraction x << y, x >> y Bit shifting x & y Bitwise and x | y Bitwise or x < y, x <= y, x > y, x >= y, x == y, x != y, x <> y, x is y, x is not y, x in s, x not in s Comparison, identity, sequence membership tests not x Logical negation x and y Logical and lambda args: expr Anonymous function GSyC - 2010 Programaci´n en Python o 14
  • 15. Programaci´n en Python o Identificadores (nombre de objetos, de funciones...): Letras inglesas de ’a’ a ’z’, en may´sculas o min´sculas. Barra u u baja ’ ’ y n´meros u Sensible a may´sculas/min´sculas u u Se puede usar utf-8 y latin-1 en las cadenas y comentarios Si el editor no marca adecuadamente la codificaci´n del o fichero, aparecer´ un error a SyntaxError: Non-ASCII character ’xc3’ in file ./holamundo.py on line 4, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details y ser´ necesario a˜adir en la segunda l´ a n ınea del fuente # -*- coding: utf-8 -*- o bien # -*- coding: iso-8859-1 -*- Python es Din´micamente tipado (frente a est´ticamente tipado) a a Fuertemente tipado (frente a d´bilmente tipado) e GSyC - 2010 Programaci´n en Python o 15
  • 16. Programaci´n en Python o En Python la declaraci´n de variables es impl´ o ıcita (no hay declaraci´n expl´ o ıcita) Las variables “nacen” cuando se les asigna un valor Las variables “desaparecen” cuando se sale de su ´mbito a La declaraci´n impl´ o ıcita de variables como en perl puede provocar resultados desastrosos #!/usr/bin/perl $sum_elementos= 3 + 4 + 17; $media=suma_elementos / 3; # deletreamos mal la variable print $media; # y provocamos resultado incorrecto Pero Python no permite referenciar variables a las que nunca se ha asignado un valor. #!/usr/bin/python sum_elementos= 3 + 4 + 17 media=suma_elementos / 3 # deletreamos mal la variable print media; # y el int´prete nos avisa con un error e GSyC - 2010 Programaci´n en Python o 16
  • 17. Programaci´n en Python o Funciones predefinidas abs() valor absoluto float() convierte a float int() convierte a int str() convierte a string round() redondea raw_input() acepta un valor desde teclado GSyC - 2010 Programaci´n en Python o 17
  • 18. Programaci´n en Python o Sangrado y separadores de sentencias ¡En Python NO hay llaves ni begin-end para encerrar bloques de c´digo! Un mayor nivel de sangrado indica que comienza o un bloque, y un menor nivel indica que termina un bloque. Las sentencias se terminan al acabarse la l´ınea (salvo casos especiales donde la sentencia queda “abierta”: en mitad de expresiones entre par´ntesis, corchetes o llaves). e El car´cter se utiliza para extender una sentencia m´s a a all´ de una linea, en los casos en que no queda “abierta”. a El car´cter : se utiliza como separador en sentencias a compuestas. Ej.: para separar la definici´n de una funci´n de o o su c´digo. o El car´cter ; se utiliza como separador de sentencias escritas a en la misma l´ınea. GSyC - 2010 Programaci´n en Python o 18
  • 19. Programaci´n en Python o La recomendaci´n oficial es emplear 4 espacios o PEP-8 Style Guide for Python Code David Goodger, Code Like a Pythonista: Idiomatic Python Traducci´n al espa˜ol: o n Programa como un Pythonista: Python Idiom´tico a Emplear 8 espacios o emplear tabuladores es legal Mezclar espacios con tabulares es muy peligroso. Para que el int´rprete lo advierta e #!/usr/bin/python -t Para que el int´rprete lo prohiba e #!/usr/bin/python -tt GSyC - 2010 Programaci´n en Python o 19
  • 20. Programaci´n en Python o Tipos de objeto Tipos de objeto En python todo son objetos: cadenas, listas, diccionarios, funciones, m´dulos. . . o En los lenguajes de scripting m´s antiguos como bash o tcl, el a unico tipo de datos es la cadena ´ Los lenguajes imperativos m´s habituales (C, C++, a pascal. . . ) suelen tener (con variantes) los tipos: booleano, car´cter, cadena, entero, real y matriz a Python tiene booleanos, enteros, reales y cadenas. Y adem´s, a cadenas unicode, listas, tuplas, n´meros complejos, u diccionarios, conjuntos... En terminolog´ python se denominan tipos de objeto ıa Estos tipos de objeto de alto nivel facilitan mucho el trabajo del programador GSyC - 2010 Programaci´n en Python o 20
  • 21. Programaci´n en Python o Tipos de objeto Comprobaci´n de tipos o #!/usr/bin/python -tt import types if type("a") == types.StringType: print "ok, es una cadena" else: print "no es una cadena" Tipos de objeto habituales: BooleanType IntType LongType FloatType StringType ListType TupleType DictType GSyC - 2010 Programaci´n en Python o 21
  • 22. Programaci´n en Python o Cadenas Cadenas No existe tipo char Comilla simple o doble print "hola" print ’hola’ print ’me dijo "hola"’ m´s legible que print ’me dijo ’hola’’ a Puede haber caracteres especiales print "holanque tal" Cadenas crudas print r"""holanque tal""" GSyC - 2010 Programaci´n en Python o 22
  • 23. Programaci´n en Python o Cadenas Una cadena se puede expandir en m´s de una l´ a ınea print "hola que tal " El operador + concatena cadenas, y el * las repite un n´mero u entero de veces Se puede acceder a los caracteres de cadenas mediante ´ ındices y rodajas como en las listas Las cadenas son inmutables. Ser´ err´neo a[1]=... ıa o GSyC - 2010 Programaci´n en Python o 23
  • 24. Programaci´n en Python o Listas Listas Tipo de datos predefinido en Python, va mucho m´s all´ de a a los arrays Es un conjunto indexado de elementos, no necesariamente homog´neos e Sintaxis:Identificador de lista, mas ´ ındice entre corchetes Cada elemento se separa del anterior por un car´cter , a a=[’rojo’,’amarillo’] a.append(’verde’) print a print a[2] print len(a) b=[’uno’,2, 3.0] GSyC - 2010 Programaci´n en Python o 24
  • 25. Programaci´n en Python o Listas El primer elemento tiene ´ ındice 0. Un ´ ındice negativo accede a los elementos empezando por el final de la lista. El ultimo elemento tiene ´ ´ ındice -1. Pueden referirse rodajas (slices) de listas escribiendo dos ´ ındices entre el car´cter : a La rodaja va desde el primero, incluido, al ultimo, excluido. ´ Si no aparece el primero, se entiende que empieza en el primer elemento (0) Si no aparece el segundo, se entiende que termina en el ultimo ´ elemento (incluido). GSyC - 2010 Programaci´n en Python o 25
  • 26. Programaci´n en Python o Listas #!/usr/bin/python -tt a=[0,1,2,3,4] print a # [0, 1, 2, 3, 4] print a[1] # 1 print a[0:2] # [0,1] print a[3:] # [3,4] print a[-1] # 4 print a[:-1] # [0, 1, 2, 3] print a[:-2] # [0, 1, 2] La misma sintaxis se aplica a las cadenas a="ni~o" n print a[-1] GSyC - 2010 Programaci´n en Python o 26
  • 27. Programaci´n en Python o Listas append() a˜ade un elemento al final de la lista n insert() inserta un elemento en la posici´n indicada o >>> li [’a’, ’b’, ’blablabla’, ’z’, ’example’] >>> li.append("new") >>> li [’a’, ’b’, ’blablabla’, ’z’, ’example’, ’new’] >>> li.insert(2, "new") >>> li [’a’, ’b’, ’new’, ’blablabla’, ’z’, ’example’, ’new’] GSyC - 2010 Programaci´n en Python o 27
  • 28. Programaci´n en Python o Listas index() busca en la lista un elemento y devuelve el ´ ındice de la primera aparici´n del elemento en la lista. Si no aparece se o eleva una excepci´n. o El operador in devuelve true si un elemento aparece en la lista, y false en caso contrario. >>> li [’a’, ’b’, ’new’, ’blablabla’, ’z’, ’example’, ’new’] >>> li.index("example") 5 >>> li.index("new") 2 >>> li.index("c") Traceback (innermost last): File "<interactive input>", line 1, in ? ValueError: list.index(x): x not in list >>> "c" in li 0 GSyC - 2010 Programaci´n en Python o 28
  • 29. Programaci´n en Python o Listas remove() elimina la primera aparici´n de un elemento en la o lista. Si no aparece, eleva una excepci´n. o pop() devuelve el ultimo elemento de la lista, y lo elimina. ´ (Pila) pop(0) devuelve el primer elemento de la lista, y lo elimina. (Cola) >>> li [’a’, ’b’, ’new’, ’blablabla’, ’z’, ’example’, ’new’, ’two’, ’elements’] >>> li.remove("new") >>> li [’a’, ’b’, ’blablabla’, ’z’, ’example’, ’new’, ’two’, ’elements’] >>> li.remove("c") Traceback (innermost last): File "<interactive input>", line 1, in ? ValueError: list.remove(x): x not in list >>> li.pop() ’elements’ >>> li [’a’, ’b’, ’blablabla’, ’z’, ’example’, ’new’, ’two’] GSyC - 2010 Programaci´n en Python o 29
  • 30. Programaci´n en Python o Listas El operador + concatena dos listas, devolviendo una nueva lista El operador * concatena repetitivamente una lista a s´ misma ı >>> li = [’a’, ’b’, ’blablabla’] >>> li = li + [’example’, ’new’] >>> li [’a’, ’b’, ’blablabla’, ’example’, ’new’] >>> li += [’two’] >>> li [’a’, ’b’, ’blablabla’, ’example’, ’new’, ’two’] >>> li = [1, 2] * 3 >>> li [1, 2, 1, 2, 1, 2] GSyC - 2010 Programaci´n en Python o 30
  • 31. Programaci´n en Python o Listas Inversi´n de una lista o El m´todo reverse() invierte las posiciones de los elementos e en una lista. No devuelve nada, simplemente altera la lista sobre la que se aplican. >>> a=[’sota’, ’caballo’, ’rey’] >>> a.reverse() >>> print a [’rey’, ’caballo’, ’sota’] GSyC - 2010 Programaci´n en Python o 31
  • 32. Programaci´n en Python o Listas Ordenar una lista La funci´n sorted() devuelve una lista ordenada (no la o modifica) El m´todo sort() ordena una lista (Modifica la lista, e devuelve None) Ambas admiten personalizar la ordenaci´n, pasando como o argumento una funci´n que compare dos elementos y devuelva o Un valor negativo si est´n ordenados a Cero si son iguales Un valor positivo si est´n desordenados a GSyC - 2010 Programaci´n en Python o 32
  • 33. Programaci´n en Python o Listas #!/usr/bin/python -tt mi_lista=[ "gamma", "alfa", "beta"] print sorted(mi_lista) # alfa, beta, gamma print mi_lista # gamma, alfa, beta. No ha cambiado. print mi_lista.sort() # Devuelve ’None’ print mi_lista # alfa, beta, gamma. La ha ordenado GSyC - 2010 Programaci´n en Python o 33
  • 34. Programaci´n en Python o Listas #!/usr/bin/python -tt mi_lista=[ [’IV’,4] , [’XX’,20], [’III’,3] ] def mi_ordena(a,b): if a[1] < b[1]: return -1 elif a[1] > b[1]: return 1 else: return 0 mi_lista.sort(mi_ordena) print mi_lista GSyC - 2010 Programaci´n en Python o 34
  • 35. Programaci´n en Python o Listas Split, join Es muy frecuente trocear una cadena para formar en un lista (split) y concatenar los elementos de una lista para formar una cadena (join) #!/usr/bin/python -tt mi_cadena="esto es una prueba" print mi_cadena.split() # [’esto’, ’es’, ’una’, ’prueba’] print "esto-tambien".split("-") # [’esto’, ’tambien’] mi_lista=["as","dos","tres"] print mi_lista.join() # ¡ERROR! Parecer´a l´gico que join() ı o # fuera un m´todo del tipo lista. Pero no e # lo es print "".join(mi_lista) # Es un m´todo del tipo string, hay e # que invocarlo desde una cadena cualquiera. # Devuelve "asdostres" GSyC - 2010 Programaci´n en Python o 35
  • 36. Programaci´n en Python o Listas Otros m´todos de los objetos string e #!/usr/bin/python -tt print "hola mundo".upper(); # HOLA MUNDO print "HOLA MUNDO".lower(); # hola mundo # Estos m´todos devuelven una cadena, e # sin modificar la cadena original a="prueba" print a.upper(); # PRUEBA print a; # prueba # find() indica la posici´n de una subcadena o print "buscando una subcadena".find("una") # 9 print "buscando una subcadena".find("nohay") # -1 # strip() devuelve una copia de la cadena quitando # espacios a derecha e izda, retornos de carro, etc print " hola n".strip() # ’hola’ GSyC - 2010 Programaci´n en Python o 36
  • 37. Programaci´n en Python o Listas En las primeras versiones de python no hab´ m´todos para los ıa e objetos de tipo string, se usaban funciones de un m´dulo string. o A partir de python 2.x esta forma se va considerando obsoleta, en python 3.x desaparece #!/usr/bin/python -tt import string a="m´s vale p´jaro en mano" a a print string.split(a) print string.upper(a) c=[’rojo’,’amarillo’,’verde’] print string.join(c) M´todos actuales para tratar cadenas: Built-in Types, String e Methods Funciones antiguas: String module GSyC - 2010 Programaci´n en Python o 37
  • 38. Programaci´n en Python o Listas Nombres de objeto Con frecuencia se habla de variables, porque es el t´rmino e tradicional. Pero Python no tiene variables, sino nombres. Son referencias a objetos #!/usr/bin/python -tt x=[’uno’] y=x # y apunta al mismo objeto print x # [’uno’] print y # [’uno’] x=[’dos’] # x apunta a un nuevo objeto print x # [’dos’] # El objeto nuevo print y # [’uno’] # El objeto antiguo x=[’uno’] y=x # y apunta al mismo objeto x.append(’dos’) # modificamos el objeto print x # [’uno’,’dos’] # el objeto modificado print y # [’uno’,’dos’] # el mismo objeto, modificado GSyC - 2010 Programaci´n en Python o 38
  • 39. Programaci´n en Python o Diccionarios Diccionarios Es un conjunto desordenado de elementos Cada elemento del diccionario es un par clave-valor. Se pueden obtener valores a partir de la clave, pero no al rev´s. e Longitud variable Hace las veces de los registros en otros lenguajes Atenci´n: Se declaran con {}, se refieren con [] o GSyC - 2010 Programaci´n en Python o 39
  • 40. Programaci´n en Python o Diccionarios Asignar valor a una clave existente reemplaza el antiguo Una clave de tipo cadena es sensible a may´sculas/min´sculas u u Pueden a˜adirse entradas nuevas al diccionario n Los diccionarios se mantienen desordenados Los valores de un diccionario pueden ser de cualquier tipo Las claves pueden ser enteros, cadenas y alg´n otro tipo u Pueden borrarse un elemento del diccionario con del Pueden borrarse todos los elementos del diccionario con clear() GSyC - 2010 Programaci´n en Python o 40
  • 41. Programaci´n en Python o Diccionarios Otras operaciones con diccionarios: len(d) devuelve el n´mero de elementos de d u d.has_key(k) devuelve 1 si existe la clave k en d, 0 en caso contrario k in d equivale a: d.has_key(k) d.items() devuelve la lista de elementos de d (pares clave:valor) d.keys() devuelve la lista de claves de d GSyC - 2010 Programaci´n en Python o 41
  • 42. Programaci´n en Python o Diccionarios #!/usr/bin/python -tt pais={’de’: ’Alemania’, ’fr’: ’Francia’, ’es’: ’Espa~a’} n print pais print pais["fr"] extension={} extension[’py’]=’python’ extension[’txt’]=’texto plano’ extension[’mp3’]=’MPEG layer 3’ for x in pais.keys(): print x, pais[x] del pais[’fr’] # Borramos francia print len(pais) # Quedan 2 paises print pais.has_key(’es’) # True pais[’es’]="Spain" # modificamos un elemento pais.clear() # Borramos todas las claves GSyC - 2010 Programaci´n en Python o 42
  • 43. Programaci´n en Python o Diccionarios #!/usr/bin/python -tt diccionario={"juan": ["empanada"] , "maria": ["refrescos","vino"]} diccionario["luis"]=["patatas fritas","platos plastico"] diccionario["luis"].append("vasos plastico") claves=diccionario.keys() claves.sort() for clave in claves: print clave, diccionario[clave] Resultado de la ejecuci´n: o juan [’empanada’] luis [’patatas fritas’, ’platos plastico’, ’vasos plastico’] maria [’refrescos’, ’vino’] GSyC - 2010 Programaci´n en Python o 43
  • 44. Programaci´n en Python o Tuplas Tuplas Tipo predefinido de Python para una lista inmutable. Se define de la misma manera, pero con los elementos entre par´ntesis. e Las tuplas no tienen m´todos: no se pueden a˜adir elementos, ni e n cambiarlos, ni buscar con index(). S´ puede comprobarse la existencia con el operador in. ı >>> t = ("a", "b", "blablabla", "z", "example") >>> t[0] ’a’ >>> ’a’ in t 1 >>> t[0] = "b" Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: object doesn’t support item assignment GSyC - 2010 Programaci´n en Python o 44
  • 45. Programaci´n en Python o Tuplas Utilidad de las tuplas: Son m´s r´pidas que las listas a a Pueden ser una clave de un diccionario (no as´ las listas) ı Se usan en el formateo de cadenas tuple(li) devuelve una tupla con los elementos de la lista li list(t) devuelve una lista con los elementos de la tupla t GSyC - 2010 Programaci´n en Python o 45
  • 46. Programaci´n en Python o Tuplas Asignaciones m´ltiples y rangos u Pueden hacerse tambi´n tuplas de variables: e >>> v = (’a’, ’b’, ’e’) >>> (x, y, z) = v >>> x ’a’ La funci´n range() permite generar listas al vuelo: o >>> range(7) [0, 1, 2, 3, 4, 5, 6] >>> (MONDAY, TUESDAY, WEDNESDAY, THURSDAY, ... FRIDAY, SATURDAY, SUNDAY) = range(7) >>> MONDAY 0 >>> SUNDAY 6 GSyC - 2010 Programaci´n en Python o 46
  • 47. Programaci´n en Python o Cadenas Unicode Unicode en Python Hasta los a˜os 90, en pr´cticamente cualquier ´mbito de la n a a inform´tica, un car´cter equival´ a un byte. Pero empleando a a ıa alguna codificaci´n ASCII extendido, como UTF-8, esto ya no es o cierto >>> pais={’es’:’espa~a’} n >>> print pais {’es’: ’espaxc3xb1a’} >>> print pais[’es’] espa~a n xc3xb1 significa C3 en hexadecimal, B1 en hexadecimal (Letra e˜e en UTF-8) n Cuando imprimimos el diccionario, se muestra la representaci´n interna de la e˜e o n Cuando imprimimos la cadena, python muestra correctante el grafema correspondiente GSyC - 2010 Programaci´n en Python o 47
  • 48. Programaci´n en Python o Cadenas Unicode Cuando imprimimos la cadena completa, python la muestra correctamente Cuando imprimimos cada elemento, no #!/usr/bin/python -tt # -*- coding: utf-8 -*- cadena="¿Procesa bien el espa~ol?" n print cadena indice = 0 while indice < len(cadena): letra = cadena[indice] print letra, indice=indice+1 Resultado: ¿Procesa bien el espa~ol? n ? ? P r o c e s a b i e n e l e s p a ? ? o l ? GSyC - 2010 Programaci´n en Python o 48
  • 49. Programaci´n en Python o Cadenas Unicode Cadenas Unicode En python 2.0 aparecen las cadenas unicode Se crean anteponiendo u cadena_unicode=u"Con cadenas unicode se trabaja mejor en espa~ol" n Es un tipo muy similar a la cadena ordinaria de 8 bits, el int´rprete hace las conversiones autom´ticamente cuando es e a necesario Es recomendable que en todos nuestos scripts usemos cadenas unicode y no las tradicionales En el ejemplo anterior, basta con usar una cadena unicode para generar una salida correcta cadena=u"¿Procesa bien el espa~ol?" n ¿Procesa bien el espa~ol? n ¿ P r o c e s a b i e n e l e s p a ~ o l ? n GSyC - 2010 Programaci´n en Python o 49
  • 50. Programaci´n en Python o Cadenas Unicode Para escribir cadenas unicode en un fichero, hay que especificarlo en la apertura #!/usr/bin/python -tt # -*- coding: utf-8 -* import codecs fd=codecs.open("/tmp/test.txt",’w’,"utf-8") fd.write(u"texto en espa~oln") n fd.close GSyC - 2010 Programaci´n en Python o 50
  • 51. Programaci´n en Python o Sentencias de control If #!/usr/bin/python -tt x = 3 if x : print ’verdadero’ else: print ’falso’ N´tese como el car´cter : introduce cada bloque de sentencias. o a GSyC - 2010 Programaci´n en Python o 51
  • 52. Programaci´n en Python o Sentencias de control For >>> a = [’cat’, ’window’, ’defenestrate’] >>> for x in a: ... print x, len(x) ... cat 3 window 6 defenestrate 12 >>> a = [’had’, ’a’, ’little’, ’lamb’] >>> for i in range(len(a)): ... print i, a[i] ... 0 had 1 a 2 little 3 lamb GSyC - 2010 Programaci´n en Python o 52
  • 53. Programaci´n en Python o Sentencias de control #!/usr/bin/python -tt x = int(raw_input("Please enter an integer: ")) if x < 0: x = 0 print ’Negative changed to zero’ elif x == 0: print ’Zero’ elif x == 1: print ’Single’ else: print ’More’ No existe switch/case GSyC - 2010 Programaci´n en Python o 53
  • 54. Programaci´n en Python o Sentencias de control While >>> a=0 >>> while a<10: ... print a, ... a=a+1 ... 0 1 2 3 4 5 6 7 8 9 La coma el final de un print evita que se imprima un salto de p´gina a GSyC - 2010 Programaci´n en Python o 54
  • 55. Programaci´n en Python o Sentencias de control break sale de un bucle. (Aunque seg´n la programaci´n u o estructurada, break no deber´ usarse nunca. Empl´alo solo si ıa e est´s muy seguro de lo que haces) a #!/usr/bin/python -tt a=10 while a > 0: print a, a=a-1 equivale a #!/usr/bin/python -tt a=10 while 1: print a, if a==1: break a=a-1 Sentencia nula: pass Valor nulo: None GSyC - 2010 Programaci´n en Python o 55
  • 56. Programaci´n en Python o Funciones Funciones #!/usr/bin/python -tt def a_centigrado(x): """Convierte grados farenheit en grados cent´grados.""" ı return (x-32)*(5/9.0) def a_farenheit(x): """Convierte grados cent´grados en grados farenheit.""" ı return (x*1.8)+32 GSyC - 2010 Programaci´n en Python o 56
  • 57. Programaci´n en Python o Funciones Los nombres de objeto declarados fuera de una funci´n son o globales #!/usr/bin/python -tt c=3 def f(x): return c+x print f(5) # 8 print c # 3 Los objetos declarados dentro de una funci´n son locales o #!/usr/bin/python -tt def f(x): c=3 return c+x print f(5) print c # ERROR: c es de ´mbito local a GSyC - 2010 Programaci´n en Python o 57
  • 58. Programaci´n en Python o Funciones Los objetos inmutables (enteros, cadenas, tuplas...) no se pueden modificar dentro de una funci´n. (Porque se crea una o objeto distinto, local) #!/usr/bin/python -tt c=3 def f(x): c=0 return c+x print f(5) # 5 print c # 3 GSyC - 2010 Programaci´n en Python o 58
  • 59. Programaci´n en Python o Funciones #!/usr/bin/python -tt c=3 def f(x): c=c-1 #ERROR: la variable local a´n no est´ definida u a return c+x print f(5) GSyC - 2010 Programaci´n en Python o 59
  • 60. Programaci´n en Python o Funciones A menos que se use la sentencia global #!/usr/bin/python -tt c=3 def f(x): global c #permite modificar un objeto global c=c-1 return c+x print f(5) #7 print c #2 GSyC - 2010 Programaci´n en Python o 60
  • 61. Programaci´n en Python o Funciones Los objetos mutables (listas, diccionarios...) declarados dentro de una funci´n tambi´n son locales o e #!/usr/bin/python -tt l= ["uno","dos"] c=3 def f(): l=["cuatro"] # nuevo objeto, local c=5 # nuevo objeto, local print l # ["uno","dos"] print c # 3 f() print l # ["uno","dos"] print c # 3 GSyC - 2010 Programaci´n en Python o 61
  • 62. Programaci´n en Python o Funciones Pero un objeto mutable s´ puede modificarse dentro de un funci´n, ı o y el objeto global queda modificado #!/usr/bin/python -tt l= ["uno","dos"] c=3 def f(): l.pop() # El objeto global c=c-5 # ERROR! print l # ["uno","dos"] print c # 3 f() print l # ["uno"] # El objeto global fue modificado print c # 3 GSyC - 2010 Programaci´n en Python o 62
  • 63. Programaci´n en Python o Ficheros Ficheros open(nombre_fichero,modo) devuelve un objeto fichero. modo: w: Escritura. Destruye contenido anterior r: Lectura. Modo por defecto r+: Lectura y escritura a: Append write(cadena) escribe la cadena en el fichero. Solo escribe cadenas, para otros tipos, es necesario pasar a texto o usar librer´ pickle ıa read() devuelve una cadena con todo el contenido del fichero readlines() devuelve una lista donde cada elemento es una l´ ınea del fichero close() cierra el fichero GSyC - 2010 Programaci´n en Python o 63
  • 64. Programaci´n en Python o Ficheros lista=[’sota’,’caballo’,’rey’] fichero=open(’prueba.txt’,’w’) for x in lista: fichero.write(x+"n") fichero.close() fichero=open(’prueba.txt’,’r’) mi_cadena=fichero.read() fichero.seek(0) # vuelvo al princio del fichero lista_de_cadenas=fichero.readlines() # ahora cada elemnto incluye n fichero.seek(0) for linea in fichero.readlines(): print linea, fichero.close() GSyC - 2010 Programaci´n en Python o 64
  • 65. Programaci´n en Python o Ficheros Los m´todos read() y readlines() crean una copia completa del e fichero en memoria. Para ficheros muy grandes es m´s eficiente trabajar l´ a ınea a l´ ınea fichero=open(’prueba.txt’,’r’) for linea in fichero: print linea, fichero.close() No se deben mezclar estas dos maneras de acceder a un fichero GSyC - 2010 Programaci´n en Python o 65
  • 66. Programaci´n en Python o Cadenas de documentaci´n o Cadenas de documentaci´n o No son obligatorias pero s´ muy recomendables (varias herramientas ı hacen uso de ellas). La cadena de documentaci´n de un objeto es su atributo __doc__ o En una sola l´ ınea para objetos sencillos, en varias para el resto de los casos. Entre triples comillas-dobles (incluso si ocupan una l´ ınea). Si hay varias l´ ıneas: La primera l´ınea debe ser una resumen breve del prop´sito del o objeto. Debe empezar con may´scula y acabar con un punto u Una l´ınea en blanco debe separar la primera l´ ınea del resto Las siguientes l´ ıneas deber´ empezar justo debajo de la ıan primera comilla doble de la primera l´ ınea GSyC - 2010 Programaci´n en Python o 66
  • 67. Programaci´n en Python o Cadenas de documentaci´n o De una sola l´ ınea: def kos_root(): """Return the pathname of the KOS root directory.""" global _kos_root ... De varias: def complex(real=0.0, imag=0.0): """Form a complex number. Keyword arguments: real -- the real part (default 0.0) imag -- the imaginary part (default 0.0) """ if imag == 0.0 and real == 0.0: return complex_zero GSyC - 2010 Programaci´n en Python o 67
  • 68. Programaci´n en Python o Cadenas de documentaci´n o Documentando el c´digo (tipo Javadoc) o Permite documentar el c´digo -generalmente las funciones- dentro o del propio c´digo o Genera la documentaci´n del c´digo en formatos legibles y o o navegables (HTML, PDF...) Se basa en un lenguaje de marcado simple PERO... hay que mantener la documentaci´n al d´ cuando se o ıa cambia el c´digo o GSyC - 2010 Programaci´n en Python o 68
  • 69. Programaci´n en Python o Cadenas de documentaci´n o Ejemplo def interseccion(m, b): """ Devuelve la interseccion de la curva M{y=m*x+b} con el eje X. Se trata del punto en el que la curva cruza el eje X (M{y=0}). @type m: n´mero u @param m: La pendiente de la curva @type b: n´mero u @param b: La intersecci´n con el eje Y o @rtype: n´mero u @return: la intersecc´oin con el eje X de la curva M{y=m*x+b} ı """ return -b/m GSyC - 2010 Programaci´n en Python o 69
  • 70. Programaci´n en Python o Excepciones Excepciones Un programa sint´cticamente correcto puede dar errores de a ejecuci´n o #!/usr/bin/python -tt while 1: x=int(raw_input("Introduce un no ")) print x GSyC - 2010 Programaci´n en Python o 70
  • 71. Programaci´n en Python o Excepciones Definimos una acci´n para determinada excepci´n o o #!/usr/bin/python -tt while 1: try: x=int(raw_input("Introduce un no :")) print x except ValueError: print ("N´mero incorrecto") u GSyC - 2010 Programaci´n en Python o 71
  • 72. Programaci´n en Python o Excepciones Se puede indicar una acci´n para cualquier excepci´n o o pero es muy desaconsejable (enmascara otros errores) El programador puede levantar excepciones #!/usr/bin/python -tt try: x=int(raw_input("Introduce un no :")) print x except : # para cualquier excepci´n o print ("N´mero incorrecto") u raise SystemExit # Excepci´n para finalizar programa o print "Esta l´nea nunca se ejecuta" ı GSyC - 2010 Programaci´n en Python o 72
  • 73. Librer´ ıas Librer´ commands ıa getstatusoutput commands.getstatusoutput permite usar mandatos de la shell desde python Ejecuta una shell, pas´ndole su argumento como stdin a Devuelve una lista dos elementos 1 El valor status devuelto por el mandato 2 Una concatenaci´n de stdout y stderr o #!/usr/bin/python -tt import commands a=commands.getstatusoutput("ls /") print a[1] GSyC - 2010 Programaci´n en Python o 73
  • 74. Librer´ ıas Librer´ commands ıa La salida del mandato es una unica cadena. Para procesarla l´ ´ ınea a l´ ınea, usamos split #!/usr/bin/python -tt # -*- coding: utf-8 -*- import commands,sys mandato="ps -ef" a=commands.getstatusoutput(mandato) if a[0] != 0: # si el mandato tiene ´xito, el status es 0 e sys.stderr.write("La orden ’"+mandato+"’ ha producido un errorn") raise SystemExit lineas=a[1].split("n") # troceamos la salida l´nea a l´nea ı ı lineas.pop(0) # quitamos la primera l´nea, la cabecera del ps ı for linea in lineas: campos_linea=linea.split() print "Usuario:"+ campos_linea[0], print "Proceso:"+ campos_linea[7] GSyC - 2010 Programaci´n en Python o 74
  • 75. Librer´ ıas Librer´ sys ıa Argumentos de linea de ´rdenes o sys.argv devuelve una lista con los argumentos pasados al script python desde la shell koji@mazinger:~$ cat ejemplo.py #!/usr/bin/python -tt import sys print sys.argv[1:] koji@mazinger:~$ ./ejemplo.py un_argumento otro_argumento [’un_argumento’, ’otro_argumento’] GSyC - 2010 Programaci´n en Python o 75
  • 76. Librer´ ıas Librer´ sys ıa Escribir en stderr #!/usr/bin/python -tt import sys sys.stderr.write(’Error: n’) Leer desde stdin, escribir en stdout #!/usr/bin/python -tt import sys for linea in sys.stdin.readlines(): sys.stdout.write(linea) GSyC - 2010 Programaci´n en Python o 76
  • 77. Librer´ ıas Librer´ os, shutil ıas os.path Las funciones os.path.join() y os.path.split() unen y separan nombres de fichero con directorios Son compatibles con cualquier S.O. No importa si el path acaba en barra o no os.path.exists() devuelve un boolean indicando si un fichero existe #!/usr/bin/python -tt import os ejemplo=os.path.join("/etc/apt","sources.list") print ejemplo # /etc/apt/sources.list print os.path.split(ejemplo) # (’/etc/apt’, ’sources.list’) print os.path.exists(ejemplo) print os.path.exists("/usr/local/noexiste") GSyC - 2010 Programaci´n en Python o 77
  • 78. Librer´ ıas Librer´ os, shutil ıas Enlazar, borrar #!/usr/bin/python -tt import os if not os.path.exists("/tmp/aa"): os.mkdir("/tmp/aa") os.chdir("/tmp/aa") # cd /tmp/aa os.link("/etc/hosts","hosts") # crea enlace duro os.symlink("/etc/hosts","enlace_hosts") # crea enlace blando os.remove("enlace_duro_hosts") # borra el fichero os.remove("enlace_hosts") # borra el fichero os.rmdir("/tmp/aa") # borra directorio (vacio) GSyC - 2010 Programaci´n en Python o 78
  • 79. Librer´ ıas Librer´ os, shutil ıas copiar, copiar y borrar recursivamente #!/usr/bin/python -tt import shutil,os shutil.copytree("/home/koji/.gnome","/tmp/probando") # copia recursivamente. El destino no debe existir shutil.copy("/etc/hosts","/tmp/probando") # copia 1 fichero (como el cp de bash) shutil.move("/tmp/probando/hosts","/tmp/probando/mi_hosts") shutil.rmtree("/tmp/probando") # borra arbol lleno GSyC - 2010 Programaci´n en Python o 79
  • 80. Librer´ ıas Librer´ os, shutil ıas os.walk Recorre recursivamente un directorio Por cada directorio devuelve una 3-tupla Directorio Subdirectorios Ficheros #!/usr/bin/python -tt import os directorio_inicial=os.getcwd() # current working directory os.chdir("/tmp/musica") # cd for x in os.walk("."): print x os.chdir(directorio_inicial) GSyC - 2010 Programaci´n en Python o 80
  • 81. Librer´ ıas Librer´ os, shutil ıas /tmp/musica |-- listado.txt |-- jazz ‘-- pop |-- sabina | |-- pirata_cojo.mp3 | ‘-- princesa.mp3 ‘-- serrat |-- curro_el_palmo.mp3 ‘-- penelope.mp3 (’.’, [’jazz’, ’pop’], [’listado.txt’]) (’./jazz’, [], []) (’./pop’, [’serrat’, ’sabina’], []) (’./pop/serrat’, [], [’curro_el_palmo.mp3’, ’penelope.mp3’]) (’./pop/sabina’, [], [’princesa.mp3’, ’pirata_cojo.mp3’]) GSyC - 2010 Programaci´n en Python o 81
  • 82. Librer´ ıas Librer´ os, shutil ıas Variables de entorno #!/usr/bin/python -tt import os, sys mi_variable=os.getenv("MI_VARIABLE") if mi_variable==None: msg="ERROR: variable de entorno MI_VARIABLE no definida" sys.stderr.write(msg+’n’) raise SystemExit GSyC - 2010 Programaci´n en Python o 82
  • 83. Librer´ ıas Librer´ pickle: Persistencia ıas Persistencia Persistencia en Python: La librer´ Pickle ıa Serializa Objetos Permite: Transmitir objetos, almacenarlos en Disco ´ SGBD o Compartir objetos Clases definidas por el usuario y sus instancias GSyC - 2010 Programaci´n en Python o 83
  • 84. Librer´ ıas Librer´ pickle: Persistencia ıas #!/usr/bin/python -tt import pickle cp={28:’madrid’,08:’barcelona’,33:’asturias’} fich=open(’prueba.pick’,’w’) pickle.dump(cp,fich) fich.close() fich=open(’prueba.pick’,’r’) codigos_postales=pickle.load(fich) fich.close() for x in codigos_postales.keys(): print x,codigos_postales[x] GSyC - 2010 Programaci´n en Python o 84