Aprendiendo a programar con Python Curso en 8

  • Slides: 74
Download presentation
Aprendiendo a programar con Python Curso en 8 horas

Aprendiendo a programar con Python Curso en 8 horas

¿Qué es un programa? Un programa es un conjunto de instrucciones diseñadas para ordenar

¿Qué es un programa? Un programa es un conjunto de instrucciones diseñadas para ordenar a la computadora a hacer algo. Es similar a una receta de cocina, que consiste en una lista de ingredientes e instrucciones paso a paso donde se usan dichos ingredientes.

Receta Tomates fritos. Ingredientes: 1 Tomate 200 gr Queso 1 huevo 100 gr Pan

Receta Tomates fritos. Ingredientes: 1 Tomate 200 gr Queso 1 huevo 100 gr Pan rallado Aceite Instrucciones: Cortar el tomate en 2 rodajas. Poner queso entre las rodajas, mezclar con huevo, cubrir con pan rallado y freir en aceite hasta que se dore.

Primer programa Código seq 1 = 'Hola' seq 2 = ' mundo!' total =

Primer programa Código seq 1 = 'Hola' seq 2 = ' mundo!' total = seq 1 + seq 2 print total Resultado Hola mundo!

Niveles de abstracción

Niveles de abstracción

Ejemplo bajo y alto nivel Bajo nivel (código máquina x 86) 8 B 542408

Ejemplo bajo y alto nivel Bajo nivel (código máquina x 86) 8 B 542408 FA 027706 B 9010000 C 84 AEBF 1 83 FA 0077 06 B 80000 C 383 B 8010000 00 C 353 BB 01000000 008 D 0419 83 FA 0376 078 BD 98 B 5 BC 3 Alto nivel (Python) def fib(n): a, b = 0, 1 for i in range(n): a, b = b, a + b return a

Ejemplo bajo y alto nivel Bajo nivel (bytecode de Python) 0 LOAD_CONST 3 PRINT_ITEM

Ejemplo bajo y alto nivel Bajo nivel (bytecode de Python) 0 LOAD_CONST 3 PRINT_ITEM 4 PRINT_NEWLINE 1 ('Hello, world!') Alto nivel (Python) print 'Hello, world!'

Compilación “Traducción” desde el código fuente a instrucciones “ejecutables” Gráfico CC-SA-NC 3. 0 Fuente:

Compilación “Traducción” desde el código fuente a instrucciones “ejecutables” Gráfico CC-SA-NC 3. 0 Fuente: https: //www. cs. utk. edu/~help/doku. php? id=compile: c

Consecuencias de la compilación • Tiempo de compilación • Aceleración en la ejecución del

Consecuencias de la compilación • Tiempo de compilación • Aceleración en la ejecución del software • Software dependiente de una plataforma

Paradigmas de programación • • • Procedural / Estructurada: C, Pascal, Perl. Orientada a

Paradigmas de programación • • • Procedural / Estructurada: C, Pascal, Perl. Orientada a Objetos: C++, Java. Lógico: Prolog, Lisp.

Programación procedural Los programas tienen rutinas o funciones con los pasos a seguir. Beneficios:

Programación procedural Los programas tienen rutinas o funciones con los pasos a seguir. Beneficios: • Estructurar el código en bloques para reutilizarlos. • Seguimiento de la lógica del programa (sin saltos a posiciones arbitrarias, aka “go to”).

POO (OOP) Se usan objetos para diseñar los programas. Los objetos son estructuras de

POO (OOP) Se usan objetos para diseñar los programas. Los objetos son estructuras de datos que tienen propiedades (caracteristicas) y métodos (acciones) que le son propios. Caracteristicas: • Encapsulación • Abstracción de datos • Polimorfismo • Herencia

Python: Especificación e implementación Especificación: Definición de caracteristicas del lenguaje Implementación: Programa que cumple

Python: Especificación e implementación Especificación: Definición de caracteristicas del lenguaje Implementación: Programa que cumple con dicha especificación. Ej. : CPython, Iron. Python, Jython

Características de Python • • • Fácil de aprender y de programar Fácil de

Características de Python • • • Fácil de aprender y de programar Fácil de leer (similar a pseudocódigo) Interpretado (Rápido para programar) Datos de alto nivel (listas, diccionarios, sets, etc) Libre y gratuito Multiplataforma (Win, Linux y Mac) Pilas incluidas Cantidad de bibliotecas con funciones extras Comunidad

Leer archivo y cargarlo en array VB Dim i, j, Array_Used As Integer Dim

Leer archivo y cargarlo en array VB Dim i, j, Array_Used As Integer Dim My. Array() As String Dim In. Buffer, Temp As String Array_Used = 0 Re. Dim My. Array(50) 'open a text file here. . . Do While Not EOF(file_no) Line Input #file_no, My. Array(Array_Used) Array_Used = Array_Used + 1 If Array_Used = UBound(My. Array) Then Re. Dim Preserve My. Array(UBound(My. Array) + 50) End If Loop 'simple bubble sort For i = Array_Used - 1 To 0 Step -1 For j = 1 To i If My. Array(j - 1) > My. Array(j) Then 'swap

Leer archivo y cargarlo en lista Python # Abrir un archivo de texto. .

Leer archivo y cargarlo en lista Python # Abrir un archivo de texto. . . file_object = open(FILENAME) # Leer todas lineas del texto en una lista (similar a un array) lista = file_object. readlines() # Ordenar la lista. sort()

Las pilas puestas La biblioteca estándar ayuda con. . . Servicios del sistema, fecha

Las pilas puestas La biblioteca estándar ayuda con. . . Servicios del sistema, fecha y hora, subprocesos, sockets, i 18 n y l 10 n, base de datos, threads, formatos zip, bzip 2, gzip, expresiones regulares, XML (DOM y SAX), Unicode, SGML, HTML, XHTML, email, manejo asincrónico de sockets, clientes HTTP, FTP, SMTP, NNTP, POP 3, IMAP 4, servidores HTTP, SMTP, debugger, random, curses, logging, compilador, decompilador, CSV, análisis lexicográfico, interfaz gráfica incorporada, matemática real y compleja, criptografía, introspección, unit testing, doc testing, etc. . .

Bibliotecas externas • Bases de datos – • Interfaces gráficas – • Qt, GTK,

Bibliotecas externas • Bases de datos – • Interfaces gráficas – • Qt, GTK, win 32, wx. Widgets, Cairo Frameworks Web – • My. SQL, Postgres. SQL, MS SQL, Informix, DB/2, SQLite Django, Turbogears, Zope, Plone, webpy Y un montón más de temas. . . – – Biopython: Manejo de secuencias genéticas PIL: para trabajar con imágenes

Mas pilas. . . • Bases de datos – • Interfaces gráficas – •

Mas pilas. . . • Bases de datos – • Interfaces gráficas – • Qt, GTK, win 32, wx. Widgets, Cairo Frameworks Web – • My. SQL, Postgres. SQL, MS SQL, Informix, DB/2, SQLite Django, Turbogears, Zope, Plone, webpy Y un montón más de temas. . . – – Biopython: Manejo de secuencias genéticas PIL: para trabajar con imágenes

CPython e IDLE

CPython e IDLE

Práctica en intérprete interactivo >>> 2+2 4 >>> _*4 16 >>> 10/3 3 >>>

Práctica en intérprete interactivo >>> 2+2 4 >>> _*4 16 >>> 10/3 3 >>> float(10)/3 3. 333333335 >>> 10. 0/3 3. 333333335 >>> int(2. 1) 2 >>> int(2. 9) 2 >>> round(2. 9) 3. 0 >>> int(round(2. 9)) 3 >>> round(2. 932224, 2) 2. 9300000002 >>> print round(2. 932224, 2) 2. 93

Práctica en intérprete interactivo II >>> "hola" + " mundo!" 'hola mundo!' >>> ("hola"

Práctica en intérprete interactivo II >>> "hola" + " mundo!" 'hola mundo!' >>> ("hola" + " mundo!"). upper() 'HOLA MUNDO!' >>> ' 123'. strip() '123' >>> 123. strip() File "<stdin>", line 1 123. strip() ^ Syntax. Error: invalid syntax >>> str(123) '123' >>> int('123') 123

Help incorporado >>> help() Welcome to Python 2. 6! This is the online help

Help incorporado >>> help() Welcome to Python 2. 6! This is the online help utility. If this is your first time using Python, you should definitely check out the tutorial on the Internet at http: //docs. python. org/tutorial/. Enter the name of any module, keyword, or topic to get help on writing Python programs and using Python modules. To quit this help utility and return to the interpreter, just type "quit". To get a list of available modules, keywords, or topics, type "modules", "keywords", or "topics". Each module also comes with a one-line summary of what it does; to list the modules whose summaries contain a given word such as "spam", type "modules spam".

Tipo de datos: Primarios y derivados Primarios (o primitivos): No necesitan de otro tipo

Tipo de datos: Primarios y derivados Primarios (o primitivos): No necesitan de otro tipo de datos, como numericos (int, float, decimal, complex) y str (cadenas). Derivados: Agrupan a alguno de los anteriores, como listas, diccionarios, tuplas, etc. Se pueden subclasificar según distintos parámetros: Ordenados (o secuenciales) – Desordenados Mutables – Inmutables

>>> type(5) <type 'int'> >>> type(5. 0) <type 'float'> >>> type(5 + 5. 0)

>>> type(5) <type 'int'> >>> type(5. 0) <type 'float'> >>> type(5 + 5. 0) <type 'float'> >>> 5 + 5. 0 10. 0 >>> type(2+3 j) <type 'complex'> >>> (2+3 j). real 2. 0 >>> (2+3 j). imag 3. 0 >>> type('Hola!') <type 'str'> >>> 'hola' + ' mundo!' 'hola mundo!' >>> 'hela' + 2 Traceback (most recent call last): File "<pyshell#32>", line 1, in <module> 'hela' + 2 Type. Error: cannot concatenate 'str' and 'int' objects >>> 'hela' + str(2) 'hela 2'

Decimal El “problema” de los números flotantes: >>> 0. 1 + 0. 1 -

Decimal El “problema” de los números flotantes: >>> 0. 1 + 0. 1 - 0. 3 5. 5511151231257827 e-17 Una manera de evitar esto: >>> round(0. 1 + 0. 1 - 0. 3, 1) 0. 0 Alternativamente, para no perder precisión: >>> from decimal import Decimal >>> Decimal('0. 1') + Decimal('0. 1') - Decimal('0. 3') Decimal('0. 0') Mas información: http: //docs. python. org/library/decimal. html

str (String o Cadenas) >>> 'Hola mundo!' >>> a='Hola mundo!' >>> len(a) 11 >>>

str (String o Cadenas) >>> 'Hola mundo!' >>> a='Hola mundo!' >>> len(a) 11 >>> a. lower() 'hola mundo!' >>> a. count('o') 2 >>> a. find('H') 0 >>> a. find('mundo') 5 >>> a. find('e') -1 >>> a. index(' ') 4 >>> a. index('e') Traceback (most recent call last): File "<pyshell#52>", line 1, in <module> a. index('e') Value. Error: substring not found >>> a. split(' ') ['Hola', 'mundo!'] http: //docs. python. org/library/string. html

Datos ordenados: Listas >>> >>> [1, >>> 5 >>> [1, >>> >>> [1, >>>

Datos ordenados: Listas >>> >>> [1, >>> 5 >>> [1, >>> >>> [1, >>> 1 >>> 4 >>> [4, >>> 5 mi_lista = [1, 2, 3] mi_lista. append(5) mi_lista 2, 3, 5] mi_lista. pop() mi_lista 2, 3] mi_lista + [4] 2, 3, 4] mi_lista 2, 3] mi_lista = mi_lista + [4] mi_lista 2, 3, 4] mi_lista. extend([5, 6]) mi_lista 2, 3, 4, 5, 6] mi_lista[0] mi_lista[3: 5] 5] mi_lista[-2]

Mas sobre listas: >>> variada = ['boga', 'cornalito', 'tararira'] >>> variada[2] 'tararira' >>> variada[2][2:

Mas sobre listas: >>> variada = ['boga', 'cornalito', 'tararira'] >>> variada[2] 'tararira' >>> variada[2][2: 8] 'rarira' >>> variada[2][2: ] 'rarira' >>> variada. append('pulpo') >>> variada ['boga', 'cornalito', 'tararira', 'pulpo'] >>> variada. remove('cornalito') >>> variada ['boga', 'tararira', 'pulpo'] >>> variada. sort() >>> variada ['boga', 'pulpo', 'tararira'] >>> variada. index('pulpo') 1 >>> variada. index('pulpa') Traceback (most recent call last): File "<pyshell#33>", line 1, in <module> variada. index('pulpa') Value. Error: list. index(x): x not in list >>> 'pulpo' in variada True >>> 'pulpa' in variada False

List comprehesion >>> vec = [2, 4, 6] >>> [3*x for x in vec]

List comprehesion >>> vec = [2, 4, 6] >>> [3*x for x in vec] [6, 12, 18] >>> [3*x for x in vec if x > 3] [12, 18] >>> [3*x for x in vec if x < 2] [] >>> [[x, x**2] for x in vec] [[2, 4], [4, 16], [6, 36]]

Tuplas: Similares a listas, aunque inmutables. >>> t 1 = ('sgn 1545', 5, 45)

Tuplas: Similares a listas, aunque inmutables. >>> t 1 = ('sgn 1545', 5, 45) >>> t 1[0] 'sgn 1545' >>> 5 in t 1 True >>> t 1. index(45) 2 >>> t 1. count(45) 1 >>> t 1. append(4) Traceback (most recent call last): File "<pyshell#39>", line 1, in <module> t 1. append(4) Attribute. Error: 'tuple' object has no attribute 'append' >>> t 1. pop() Traceback (most recent call last): File "<pyshell#40>", line 1, in <module> t 1. pop() Attribute. Error: 'tuple' object has no attribute 'pop' >>> t 1. remove(45) Traceback (most recent call last): File "<pyshell#44>", line 1, in <module> t 1. remove(45) Attribute. Error: 'tuple' object has no attribute 'remove'

Diccionarios: Datos agrupados por clave-valor, sin orden. >>> en 2 es = {'blue': 'azul',

Diccionarios: Datos agrupados por clave-valor, sin orden. >>> en 2 es = {'blue': 'azul', 'red': 'rojo', 'black': 'negro'} >>> en 2 es['blue'] 'azul' >>> en 2 es['azul'] Traceback (most recent call last): File "<pyshell#47>", line 1, in <module> en 2 es['azul'] Key. Error: 'azul' >>> 'blue' in en 2 es #verifico que una clave exista en 1 dict. True >>> en 2 es. keys() ['blue', 'black', 'red'] >>> en 2 es. values() ['azul', 'negro', 'rojo'] >>> en 2 es. items() [('blue', 'azul'), ('black', 'negro'), ('red', 'rojo')] >>> en 2 es. get('green', 'N/D') 'N/D' >>> es 2 en = {} #Diccionario vacio >>> es 2 en['azul'] = 'blue' #Cargo un par clave-valor >>> es 2 en {'azul': 'blue'}

Ejemplo de diccionario tom_map = { 1992: { 1: [ ('1 A', 8. 9),

Ejemplo de diccionario tom_map = { 1992: { 1: [ ('1 A', 8. 9), ('1 B', 13. 6), ('1 C', 22. 3), ('1 D', 60. 8), ('1 E', 70. 4), ('1 F -G', 93. 6), ('1 H', 111. 7), ('1 I', 129. 2), ('1 J', 10000)], 2: [ ('2 A', 1. 6), ('2 B', 16. 2), ('2 C', 18. 6), ('2 D', 22. 5), ('2 E', 27. 6), ('2 F', 44. 8), ('2 G', 68), ('2 H', 72. 4), ('2 I', 76. 1), ('2 J', 100. 5), ('2 K', 122. 9), ('2 L', 10000)], 3: [ ('3 A', 24. 2), ('3 B', 30. 4), ('3 C', 54. 8), ('3 D', 61. 1), ('3 E', 64. 4), ('3 F', 97), ('3 G', 98. 4), ('3 H', 108), ('3 I', 100000)], 4: [ ('4 A', 2), ('4 B', 6. 6), ('4 C', 32. 9), ('4 D', 38), ('4 E', 50), ('4 F', 58. 4), ('4 G', 100. 5), ('4 H', 113. 2), ('4 I', 10000)], 5: [ ('5 A', 4. 6), ('5 B', 17. 2), ('5 C', 42. 8), ('5 D', 44. 6), ('5 E', 72. 7), ('5 F', 75), ('5 G', 84. 9), ('5 H', 92. 3), ('5 I', 10000)], 6: [ ('6 A', 25), ('6 B', 31. 8), ('6 C', 42), ('6 D', 61. 9), ('6 E', 69. 6), ('6 F', 89. 6), ('6 G', 10000)], 7: [ ('7 A', 3), ('7 B', 11), ('7 C', 21), ('7 D', 36. 8), ('7 E', 52. 6), ('7 F', 70. 6), ('7 G', 75. 7), ('7 H', 10000)], 8: [ ('8 A-B', 18. 2), ('8 C', 20. 1), ('8 D', 41. 1), ('8 E', 61. 3), ('8 F', 80. 6), ('8 G', 89. 1), ('8 H', 10000)], 9: [ ('9 A', 8. 9), ('9 B', 22), ('9 C', 28. 9), ('9 D', 39), ('9 E', 56. 4), ('9 F', 57. 4), ('9 G', 64. 2), ('9 H', 69. 1), ('9 I', 79), ('9 J', 102. 6), ('9 K', 10000)], 10: [ ('10 A', 12), ('10 B', 37. 3), ('10 C-D', 48. 8), ('10 E', 64. 6), ('10 F', 84. 1), ('10 G', 10000)], 11: [ ('11 A', 20. 8), ('11 B', 32. 3), ('11 C', 45. 4), ('11 D', 59. 3), ('11 E', 79. 9), ('11 F', 83. 3), ('11 G', 83. 8), ('11 H', 10000)], 12: [ ('12 A', 13. 8), ('12 B', 28. 2), ('12 C', 32. 5), ('12 D', 41), ('12 E', 47. 6), ('12 F', 67. 3), ('12 G', 86), ('12 H', 91. 8), ('12 I', 10000)]} , 2000 : {1: [ ('1 A', 19. 5), ('1 B', 25), ('1 C', 31. 8), ('1 D', 70), ('1 E', 92. 7), ('1 F-G', 127. 6), ('1 H', 142), ('1 I', 163), ('1 J', 10000)], 2: [ ('2 A', 4), ('2 B', 13), ('2 C', 16), ('2 D-E', 31), ('2 F', 45. 1), ('2 G', 81. 2), ('2 H', 85), ('2 I', 90. 1), ('2 J', 116. 1), ('2 K', 143), ('2 L', 10000)], 3: [ ('3 A', 32), ('3 B', 33), ('3 C', 71. 5), ('3 D', 83), ('3 E', 85), ('3 F', 129), ('3 G', 140), ('3 H-I', 10000)], 4: [ ('4 A-B', 12), ('4 C', 46), ('4 D', 56), ('4 E', 72. 5), ('4 F', 75), ('4 G', 101), ('4 H', 124), ('4 I', 10000)], 5: [ ('5 A', 13. 5), ('5 B', 30), ('5 C', 69), ('5 D', 71. 1), ('5 E', 102), ('5 F', 104), ('5 G', 110. 1), ('5 H', 112), ('5 I', 10000)], 6: [ ('6 A', 33. 5), ('6 B', 38. 6), ('6 C', 50), ('6 D', 71), ('6 E', 81), ('6 F', 96), ('6 G', 10000)], 7: [ ('7 A', 2), ('7 B', 7), ('7 C', 21. 5), ('7 D', 45. 5), ('7 E', 48), ('7 F', 72. 3), ('7 G', 73), ('7 H', 10000)], 8: [ ('8 A', 2), ('8 B', 23. 8), ('8 C', 30), ('8 D', 40), ('8 E', 57), ('8 F', 68. 3), ('8 G', 84), ('8 H', 10000)], 9: [ ('9 A', 4), ('9 B', 28), ('9 C', 32), ('9 D', 35), ('9 E', 50. 3), ('9 F', 53. 7), ('9 G', 57. 5), ('9 H', 62), ('9 I', 72. 5), ('9 J', 102), ('9 K', 10000)], 10: [ ('10 A', 11), ('10 B', 43), ('10 C-E', 61. 5), ('10 F', 80), ('10 G', 10000)], 11: [ ('11 A', 20. 5), ('11 B', 36. 5), ('11 C', 49), ('11 D', 76), ('11 E', 90), ('11 F-G', 92), ('11 H', 10000)], 12: [ ('12 A', 21), ('12 B', 32. 5), ('12 C', 38), ('12 D', 55. 3), ('12 E', 68. 5), ('12 F-G', 114), ('12 H', 117), ('12 I', 10000)]}}

Sets (Conjuntos) >>> mi_set = set() >>> mi_set. add('jose') >>> mi_set. add('juan') >>> mi_set.

Sets (Conjuntos) >>> mi_set = set() >>> mi_set. add('jose') >>> mi_set. add('juan') >>> mi_set. add('natalia') >>> mi_set. add('viki') >>> mi_set set(['jose', 'juan', 'viki', 'natalia']) >>> mi_set. pop() 'jose' >>> mi_set set(['juan', 'viki', 'natalia']) >>> mi_set. add('jose') >>> mi_set set(['jose', 'juan', 'viki', 'natalia']) >>> otro_set = set(['juan', 'karina', 'diana']) >>> otro_set set(['diana', 'juan', 'karina']) >>> mi_set. intersection(otro_set) set(['juan']) >>> mi_set. union(otro_set) set(['jose', 'viki', 'natalia', 'diana', 'juan', 'karina']) >>> mi_set. difference(otro_set) set(['jose', 'viki', 'natalia'])

Conversión de datos: En Python siempre es explicito >>> rgb=dict([('blue', '#0000 FF'), ('black', '#000000'),

Conversión de datos: En Python siempre es explicito >>> rgb=dict([('blue', '#0000 FF'), ('black', '#000000'), ('red', '#FF 0000')]) >>> rgb['black'] '#000000' >>> list(t 1) ['sgn 1545', 5, 45] >>> lista = list('Hago 1 lista') >>> lista ['H', 'a', 'g', 'o', '1', 'l', 'i', 's', 't', 'a'] >>> tuple(lista) ('H', 'a', 'g', 'o', '1', 'l', 'i', 's', 't', 'a') >>> str(lista) "['H', 'a', 'g', 'o', '1', 'l', 'i', 's', 't', 'a']" >>> ''. join(lista) 'Hago una lista' >>> 'Hago una lista'. split(' ') ['Hago', 'una', 'lista']

Data I/O Entrada: input('prompt') raw_input('prompt') >>> edad = Ingrese la >>> edad 33 >>>

Data I/O Entrada: input('prompt') raw_input('prompt') >>> edad = Ingrese la >>> edad 33 >>> edad = Ingrese la >>> edad '33' input('Ingrese la edad: ') edad: 33 raw_input('Ingrese la edad: ') edad: 33 Python 3: input() es raw_input() Salida: print Python 3: print()

Estructuras de control de flujo if: Condición for: Repetición while: Repetición

Estructuras de control de flujo if: Condición for: Repetición while: Repetición

if if <expresion 1>: <Instrucciones> elif <expresion 2>: <Instrucciones> else: <Instrucciones> if coord !=

if if <expresion 1>: <Instrucciones> elif <expresion 2>: <Instrucciones> else: <Instrucciones> if coord != 'N/A': year = int(coord[0][-4: ])

for <var> in <iterable>: <instrucciones> for x in [1, 3, 4]: print x

for <var> in <iterable>: <instrucciones> for x in [1, 3, 4]: print x

while <expresion>: <instrucciones> while mi_set: print mi_set. pop()

while <expresion>: <instrucciones> while mi_set: print mi_set. pop()

Ejercicios

Ejercicios

Archivos Lectura: (1) Abrir (open) (2) Leer (read, readlines, readline) (3) Cerrar (close) Escritura:

Archivos Lectura: (1) Abrir (open) (2) Leer (read, readlines, readline) (3) Cerrar (close) Escritura: (1) Abrir (open) (2) Guardar (write) (3) Cerrar (close)

Leyendo un archivo: (1) La función open crea un “filehandle”. open(filename[, mode[, bufsize]]) Ej:

Leyendo un archivo: (1) La función open crea un “filehandle”. open(filename[, mode[, bufsize]]) Ej: fh = open('mi_archivo. txt', 'r') (2) read(n): Lee n bytes, por defecto lee el archivo entero. readline(): Devuelve str con una sola linea readlines(): Devuelve una lista con str por cada línea

fh = open('archivo. txt') contenido = fh. read() print contenido fh = open('archivo. txt')

fh = open('archivo. txt') contenido = fh. read() print contenido fh = open('archivo. txt') contenido = fh. readlines() print contenido = '' fh = open('archivo. txt') while True: line = fh. readline() contenido += line if line='' break print contenido # Para todos: fh. close()

Apertura secuencial de un archivo fh = open('archivo. txt') contenido = '' for line

Apertura secuencial de un archivo fh = open('archivo. txt') contenido = '' for line in fh: contenido += line fh. close()

Leyendo con 'with' (Python 2. 6 en adelante) with EXPRESION as VARIABLE: BLOQUE DE

Leyendo con 'with' (Python 2. 6 en adelante) with EXPRESION as VARIABLE: BLOQUE DE CODIGO with open('archivo. txt') as fh: for line in fh: print line

Escribiendo archivos Modos de escritura: w: Write, graba un archivo nuevo, si existe, borrarlo.

Escribiendo archivos Modos de escritura: w: Write, graba un archivo nuevo, si existe, borrarlo. a: Append (agregar), agrega información al final de un archivo preexistente. Si no existe, crea uno nuevo (uso típico: logs). Ejemplo: fh = open('/home/yo/archivo. txt', 'w') fh. write('1n 2n 3n 4n 5n') fh. close()

Archivos CSV (Comma separated file) Ejemplo: Sebastián, Perez, 33, 23566777 Jose, Martinez, 23, 42121329

Archivos CSV (Comma separated file) Ejemplo: Sebastián, Perez, 33, 23566777 Jose, Martinez, 23, 42121329 Karina, Gonzalez, 32, 24159857 Maria Laura, Yañes, 19, 43852144 Otro separador: Sebastián; Perez; 33; 23566777 Jose; Martinez; 23; 42121329 Karina; Gonzalez; 32; 24159857 Maria Laura; Yañes; 19; 43852144

Leyendo CSV sin usar módulo CSV: fh = open('archivo. txt') for line in fh:

Leyendo CSV sin usar módulo CSV: fh = open('archivo. txt') for line in fh: linea = line. split(', ') # procesar elementos: nombre = linea[0] apellido = linea[1] # etc, etc fh. close()

CSV con módulo CSV import csv lineas = csv. reader(open('fn. csv')) for line in

CSV con módulo CSV import csv lineas = csv. reader(open('fn. csv')) for line in lineas: nombre = line[0] apellido = line[1] Cambiando separador (delimitador): lineas = csv. reader(open('fn. csv'), delimiter='; ') Dialectos: >>> csv. list_dialects() ['excel-tab', 'excel']

Escribiendo archivos CSV >>>. . . >>> import csv spam. Writer = csv. writer(open('eggs.

Escribiendo archivos CSV >>>. . . >>> import csv spam. Writer = csv. writer(open('eggs. csv', 'w'), delimiter=' ', quotechar='|', quoting=csv. QUOTE_MINIMAL) spam. Writer. writerow(['Spam'] * 5 + ['Baked Beans']) spam. Writer. writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])

Lectura y escritura de Excel: xlrd y xlwt Instalando Easy_install: En Windows: http: //pypi.

Lectura y escritura de Excel: xlrd y xlwt Instalando Easy_install: En Windows: http: //pypi. python. org/pypi/setuptools Leyendo Excel: import xlrd iedb = {} # Empty dictionary book = xlrd. open_workbook('sampledata. xls') sh = book. sheet_by_index(0) for i in range(1, sh. nrows): #skips fist line. iedb[sh. cell_value(rowx=i, colx=1)] = sh. cell_value(rowx=i, colx=2)

Creando planillas Excel: import xlwt list 1 = [1, 2, 3, 4, 5] list

Creando planillas Excel: import xlwt list 1 = [1, 2, 3, 4, 5] list 2 = [234, 267, 281, 301, 331] wb = xlwt. Workbook() ws = wb. add_sheet('Primera hoja') ws. write(0, 0, 'Column A') ws. write(0, 1, 'Column B') i = 1 for x, y in zip(list 1, list 2): #Walk 2 list @ once. ws. write(i, 0, x) # Fila, Columna, Datos. write(i, 1, y) i += 1 wb. save('mynewfile. xls')

Pickle: Persistencia simple de datos. Pickle vs. c. Pickle Grabar: >>> spdict = {'blue':

Pickle: Persistencia simple de datos. Pickle vs. c. Pickle Grabar: >>> spdict = {'blue': 'azul', 'red': 'rojo'} >>> spdict {'blue': 'azul', 'red': 'rojo'} >>> import c. Pickle >>> fh = open('spict. data', 'w') >>> c. Pickle. dump(spdict, fh) >>> fh. close() Leer: >>> spdict = c. Pickle. load(open('spict. data')) >>> spdict {'blue': 'azul', 'red': 'rojo'}

Modularizando el código Ejemplo de función: Parámetros fijos: >>> len('Hola') 4 Parámetros variables: >>>

Modularizando el código Ejemplo de función: Parámetros fijos: >>> len('Hola') 4 Parámetros variables: >>> [0, >>> [2, range(5) 1, 2, 3, 4] range(2, 5) 3, 4] range(2, 5, 2) 4]

Definición de función: def Nombre_Funcion(parametro 1, parametro 2, etc): ''' Descripcion optativa ''' …

Definición de función: def Nombre_Funcion(parametro 1, parametro 2, etc): ''' Descripcion optativa ''' … código de la función … return DATA Ejemplo: def tair_data(f_in): tair 9_d = {} for rec in Seq. IO. parse(open(f_in), 'fasta'): tair 9_d[rec. id] = rec. description return tair 9_d Importante: Ambito de variables

Mas ejemplos: def sgn_u(bacsgn, rango_ini, rango_end, sgn_u_tomato_d): """ Procesa un nombre tipo 'C 02

Mas ejemplos: def sgn_u(bacsgn, rango_ini, rango_end, sgn_u_tomato_d): """ Procesa un nombre tipo 'C 02 HBa 0106 H 06. 1' con sus posiciones, compara con datos en sgn_u_tomato_d y retorna cuales son. """ sgn_u = [] if bacsgn in sgn_u_tomato_d: for gendata in sgn_u_tomato_d[bacsgn]: if gendata[0] <= rango_ini <= rango_end <= gendata[1]: sgn_u. append(sgns. get(gendata[2], gendata[2])) return sgn_u def august(name, rango_ini, rango_end, crms_d): """ Procesa un nombre tipo 'C 02 HBa 0106 H 06. 1' con sus posiciones, compara con datos en crms_d y dice si es AUGUST + o -. """ if name in crms_d: for x in crms_d[name]: if x[0] <= rango_ini <= rango_end <= x[1]: return True return False

Función que “no devuelve nada” (devuelve None) def savelist(L, fn): ''' Una lista (L)

Función que “no devuelve nada” (devuelve None) def savelist(L, fn): ''' Una lista (L) es grabada como archivo con nombre fn ''' fh = open(fn, 'w') for x in L: fh. write(x+'n') fh. close() return None

Parametros por defecto def savelist(L, fn='tmp. txt'): ''' Una lista (L) es grabada como

Parametros por defecto def savelist(L, fn='tmp. txt'): ''' Una lista (L) es grabada como archivo con nombre fn ''' fh = open(fn, 'w') for x in L: fh. write(x+'n') fh. close() return None

Número indeterminado de argumentos No se conoce de antemano cuantos argumentos irán en la

Número indeterminado de argumentos No se conoce de antemano cuantos argumentos irán en la función. El argumento que tenga el * (asterisco) será pasado como una tupla. def promedio(*numeros): if len(numeros)==0: return None else: return(float(sum(numeros))/len(numeros))

Número indeterminado de argumentos con claves Los argumentos en exceso son pasados como diccionario

Número indeterminado de argumentos con claves Los argumentos en exceso son pasados como diccionario def cli(nombre, **parametros): linea = '' for p_key, p_vals in parametros. iteritems(): linea += ' -' + p_key + ' ' + p_vals return nombre+linea

Módulos Los módulos son archivos con instrucciones (funciones, clases) y datos para ser usado

Módulos Los módulos son archivos con instrucciones (funciones, clases) y datos para ser usado desde un programa. Usando módulos >>> import os >>> os. getcwd() '/home/sbassi' >>> from os import getcwd >>> getcwd() '/home/sbassi' >>> from os import * >>> getcwd() '/home/sbassi' >>> sep '/' >>> import xml. etree. Element. Tree as ET

Instalando módulos (1) Copiar al PYTHONPATH >>> import sys >>> sys. path ['', '/usr/local/lib/python

Instalando módulos (1) Copiar al PYTHONPATH >>> import sys >>> sys. path ['', '/usr/local/lib/python 2. 6/dist-packages/xlrd 0. 7. 1 -py 2. 6. egg', '/usr/local/lib/python 2. 6/distpackages/biopython-1. 52 -py 2. 6 -linux-i 686. egg', '/usr/lib/python 2. 6/platlinux 2', '/usr/lib/python 2. 6/lib-tk', '/usr/lib/python 2. 6/lib-old', '/usr/lib/python 2. 6/libdynload', '/usr/lib/python 2. 6/dist-packages/Numeric', '/usr/lib/python 2. 6/dist-packages/PIL', '/usr/lib/python 2. 6/dist-packages/gst-0. 10', '/var/lib/python-support/python 2. 6', '/usr/lib/python 2. 6/dist-packages/gtk-2. 0', '/var/lib/python-support/python 2. 6/gtk-2. 0', '/usr/lib/python 2. 6/dist-packages/wx-2. 6 -gtk 2 unicode', '/usr/local/lib/python 2. 6/dist-packages']

Instalando módulos (2) Usar gestor de paquetes rpm, apt-get, etc (3) Easy Install (easy_install)

Instalando módulos (2) Usar gestor de paquetes rpm, apt-get, etc (3) Easy Install (easy_install) $ sudo apt-get install python-setuptools $ sudo easy_install NOMBRE_DEL_MODULO Modulos como programas: if __name__ == "__main__": # hacer algo

Biblioteca estándar (PSL): http: //docs. python. org/library/ import os # directorio actual? print os.

Biblioteca estándar (PSL): http: //docs. python. org/library/ import os # directorio actual? print os. getcwd() # listo todos los archivos del dir actual ma = os. listdir(os. getcwd()) # necesito solo los terminados en. txt ma 2 = [] for x in ma: if x. endswith('. txt'): ma 2. append(x) print ma 2 # otra manera de retener los terminados en. txt ma 2 = [x for x in ma if x. endswith('. txt')] print ma 2

import glob # directorio actual? print os. getcwd() # listo todos los archivos del

import glob # directorio actual? print os. getcwd() # listo todos los archivos del dir actual ma = os. listdir(os. getcwd()) # necesito solo los terminados en. txt ma 2 = [] for x in ma: if x. endswith('. txt'): ma 2. append(x) print ma 2 # otra manera de retener los terminados en. txt ma 2 = [x for x in ma if x. endswith('. txt')] print ma 2

import zipfile a_list = ["Test 1. txt", "Test 2. txt", "Test 3. txt"] #

import zipfile a_list = ["Test 1. txt", "Test 2. txt", "Test 3. txt"] # Guardar archivos en un zip zfilename = "mi_archivozipeado. zip" zout = zipfile. Zip. File(zfilename, "w") for fname in a_list: zout. write(fname) zout. close()

import zipfile myfile = zipfile. Zip. File('archivo. zip') if myfile. is_zipfile(archivo. zip): print "Es

import zipfile myfile = zipfile. Zip. File('archivo. zip') if myfile. is_zipfile(archivo. zip): print "Es un archivo zip OK" for fn in myfile. namelist(): print fn myfile. extractall() else: print "No es un archivo zip valido"

>>> import time >>> # esperar n segundos. >>> time. sleep(2) >>> time. asctime()

>>> import time >>> # esperar n segundos. >>> time. sleep(2) >>> time. asctime() 'Tue Dec 1 20: 07: 34 2009' >>> time() 1259708878. 824398 >>> time() 1259708882. 5425911 >>> a = time() >>> b-a 6. 0693800449371338 Para medir tiempo de procesos, usar módulo timeit

import sys from optparse import Option. Parser usage = "usage: %prog [password_file] [dictionary_file]n" usage

import sys from optparse import Option. Parser usage = "usage: %prog [password_file] [dictionary_file]n" usage += "or %prog [options] [password_file]nn" usage += "Type %prog -h for more information" parser = Option. Parser(usage, version="%prog 1. 0") parser. add_option("-i", "--input", dest="input_file", help="Input file. ") parser. add_option("-d", "--dictionary", dest="dict_file", help="Use a dictionary file. ") (opts, args) = parser. parse_args() if opts. input_file: fh = open(opts. input_file) elif args: fh = open(args[0]) elif sys. stdin: fh = sys. stdin else: parser. error("Enter an input file") if len(args)==2: fd = open(args[1]) elif opts. dict_file: fd = open(opts. dict_file) else: parser. error('Enter a dictionary file or aspell dictionary')

Subprocess import subprocess cmd = ['ps', '-eo', 'pcpu'] p = subprocess. Popen(cmd, stdout=subprocess. PIPE)

Subprocess import subprocess cmd = ['ps', '-eo', 'pcpu'] p = subprocess. Popen(cmd, stdout=subprocess. PIPE) std = p. communicate()[0] allstatus = str(std). split('n')

webbrowser >>> import webbrowser >>> webbrowser. open('http: //www. py 4 bio. com') True >>>

webbrowser >>> import webbrowser >>> webbrowser. open('http: //www. py 4 bio. com') True >>> b = webbrowser. get('opera') >>> url = 'http: //www. py 4 bio. com' >>> b. open(url) True

Mas ayuda. . . Manual de Python: http: //pyspanishdoc. sourceforge. net/tut. html Mailing list:

Mas ayuda. . . Manual de Python: http: //pyspanishdoc. sourceforge. net/tut. html Mailing list: http: //python. org. ar/pyar/Lista. De. Correo List para incio: http: //groups. google. com/group/a-python Mas recursos: http: //python. org. ar/pyar/Aprendiendo. Python