Python 3 al descubierto

Python 3 al descubierto

@ProfGastonPerez
@ProfGastonPerez
1 Follower
1 week ago 34
AI Summary
Bulleted
Text
Key Insights

Python 3 al descubierto

@ProfGastonPerez1 week ago

1/381
2/381
3/381
4/381
Python 3 al descubierto Arturo Fernández MontoroISBN: 978-84-939450-
4-6 edición original publicad…
5/381
EDITOR, S.A. de C.V. no será jurídicamenteresponsable por: errores u
omisiones; daños y perjuicios…
6/381
Impreso en México. Printed in México.
Empresas del grupo:México: Alfaomega Grupo Editor, S.A. de C…
7/381
PRÓLOGO
En la actualidad Python es uno de los lenguajes de programacióncon mayor
proyección. Su f…
8/381
programación orientada a objetos y detalles más avanzados sobre
ellenguaje. Los siguientes capítul…
9/381
ÍNDICE
PRÓLOGO
CAPÍTULO 1. PRIMEROS PASOS Introducción ¿Qué es Python? Un
poco de historia Princ…
10/381
Operadores Funciones matemáticas Conjuntos Cadenas de textoTipos
Principales funciones y métodos O…
11/381
Funcionamiento de la importación Path de búsqueda Librería
estándarPaquetes Comentarios Excepcione…
12/381
Iterators Funciones integradas Generators Closures DecoratorsPatrón
decorator, macros y Python dec…
13/381
Ficheros CSV Analizador de ficheros de configuración Compresión y
descompresión de ficheros Format…
14/381
CGI WSGI Web scraping urllib.request lxml Frameworks pyramid pylatte
CAPÍTULO 9. INSTALACIÓN Y DIS…
15/381
ÍNDICE ALFABÉTICO
16/381
PRIMEROS PASOS
INTRODUCCIÓN
Este primer capítulo será nuestra primera toma de contacto
conPython…
17/381
¿QUÉ ES PYTHON?
Básicamente, Python es un lenguaje de programación de alto nivel,
interpretado y …
18/381
con una sintaxis clara y concisa. Además, no requiere dedicar tiempo asu
compilación debido a que …
19/381
momento de escribir estas líneas, la versión 3 cuenta con laactualización
3.2, liberada en febrero…
20/381
Foundation invita, a cualquiera que quiera hacerlo, a contribuir aldesarrollo
y promoción de este …
21/381
lenguaje.La interacción con el intérprete del lenguaje se puede
hacerdirectamente a través de la c…
22/381
en una línea diferente. Por otro lado, tampoco se hace uso de las llaves ({})
para indicar el prin…
23/381
e IronPython, que permite la ejecución en la plataforma .NET deMicrosoft.
El siguiente apartado lo…
24/381
INSTALACIÓN
A continuación, nos centraremos en la instalación del intérprete dePython y
sus herra…
25/381
Figura 1-2. Selección de la instalación de Python para todos losusuarios o
solo para el actual
Al…
26/381
Figura 1-3. Selección del directorio base para de la instalaciónde Python
Avanzamos un paso más y …
27/381
Figura 1-4. Personalización de la instalación de Python
La interfaz gráfica presenta algunas venta…
28/381
necesitemos,para, por ejemplo, probar ciertas líneas de código o sentencias
de
29/381
control.Obviamente, además de la mencionada interfaz de comandos,
elintérprete de Python ha sido i…
30/381
continuar a través del botón Continue. En el siguiente paso del asistente se
nos solicita que indi…
31/381
Figura 1-7. Selección del disco para la instalación de Python
Linux
La mayoría de las distribucio…
32/381
siguiente comando para comenzar a utilizar la
33/381
consola interactiva del intérprete de Python:
$ python3
Al contrario que en Mac y en Windows, par…
34/381
HOLA MUNDO
La primera toma de contacto práctica con el lenguaje larealizaremos a
través del famos…
35/381
Veremos, entonces, cómo aparece el mencionado mensaje en lasiguiente
línea y después volverá a apa…
36/381
Código fuente y bytecode
Hasta ahora solo hemos hablado de los ficheros de código Python,que
util…
37/381
HERRAMIENTAS DE DESARROLLO
Uno de los factores importantes a tener en cuenta, a la hora deabordar …
38/381
En la actualidad existen multitud de editores de texto queincorporan otras
muchas funcionalidades,…
39/381
ofrecen funcionalidades específicas para él mismo. Entre las ventajasde
estos dos IDE caben destac…
40/381
La instalación de IPython puede realizarse como si de un módulo dePython
más se tratara, siendo, p…
41/381
ejecución del programa paso a paso. El lanzamiento de pdb paranuestro
script de ejemplo se haría d…
42/381
Hola Mundo8 function calls in 0.000 secondsOrdered by: standard
namencalls tottime percall cumtime…
43/381
NOVEDADES EN PYTHON 3
La última versión de Python trae consigo una serie de clarasnovedades y
dif…
44/381
>>> 7 / 2
45/381
Por otro lado, para la división entera, en Python 3, ejecutaríamos elsiguiente
comando, siendo el …
46/381
que debemos tenerlo en cuenta a la hora deutilizar la sentencia import. Por
ejemplo, el módulo Coo…
47/381
encuentra dentro de http y se llama client (import http.Client) .Las
excepciones que capturan un o…
48/381
ESTRUCTURAS Y TIPOS DE DATOSBÁSICOS
INTRODUCCIÓN
Realizada una primera toma de contacto con Pytho…
49/381
CONCEPTOS BÁSICOS
Uno de los conceptos básicos y principales en Python es el objeto.
Básicamente,…
50/381
ficheros, de los que se ocupa el capítulo 7.Antes de comenzar a descubrir
los objetos built-in de …
51/381
referencias que se van asignando entre objetos y variables. En funciónde un
algoritmo determinado,…
52/381
Posteriormente ejecutamos una nueva sentencia como la siguiente:
53/381
>>> x = "test"
Los cambios efectuados en memoria pueden apreciarse en la figura2-2,
donde comprob…
54/381
Ahora modificamos el segundo elemento de la primera lista,ejecutando la
siguiente sentencia:
>>> …
55/381
Como resultado, ambas listas habrán sido modificadas y su valorserá el
mismo. ¿Por qué se da esta …
56/381
NÚMEROS
Como en cualquier lenguaje de programación, en Python, larepresentación
y el manejo de nú…
57/381
imaginaria aparece representada por la letra j, siendo también
posibleemplear la misma letra en ma…
58/381
Sistemas de representación
Tal y como hemos adelantado previamente, Python puederepresentar los
n…
59/381
existe la precedencia de operadores, lo que deberemos tener encuenta a la
hora de escribir expresi…
60/381
^ a b XOR (bit)
a & b AND (bit)
a == b Igualdad
a != b Desigualdad
a or b OR (lógica)
a and b …
61/381
matemáticas. Entre ellas, tenemos algunas como el valor absoluto, laraíz
cuadrada, el cálculo del …
62/381
Definir y operar con conjuntos matemáticos también es posible enPython.
La función para crear un c…
63/381
CADENAS DE TEXTO
No cabe duda de que, a parte de los números, las cadenas de texto( strings )
son…
64/381
Otra de las novedades de Python 3 con referencia a las cadenas detexto es el
tipo de estas que sop…
65/381
>>> cad. encode()b'es de tipo str'
La función decode() realiza el paso inverso, es decir, conviert…
66/381
Respecto a los métodos con los que cuentan los objetos de tipostring,
Python incorpora varios de e…
67/381
" cadena con espacios en blanco "
Relacionados con upper() y lower() encontramos otro métodollamad…
68/381
format(). Este método admite emplear, dentro de la cadena de texto,los
caracteres {}, entre los qu…
69/381
del ejemplo anterior podemos imprimir solo los tres primeroscaracteres:
>>> print(cad[:3])Cad
En …
70/381
TUPLAS
En Python una tupla es una estructura de datos que representa unacolección
de objetos, pud…
71/381
('a', 3)5.6
Concatenar dos tuplas es sencillo, se puede hacer directamente através del
operador +…
72/381
LISTAS
Básicamente, una lista es una colección ordenada de objetos,similar al
array dinámico empl…
73/381
True
Existen dos funciones integradas que relacionan las listas con lastuplas:
list() y tuple(). …
74/381
>>> li.insert(3, 'c')>>> li.insert(12, 'c')
Por el contrario, podemos insertar un elemento en una …
75/381
Ordenación
Los elementos de una lista pueden ser ordenados a través delmétodo sort()
o utilizando…
76/381
adicional y observaremos que el criterio de ordenación que utiliza
elintérprete, por defecto, es o…
77/381
Veamos un ejemplo prácticoconstrucción sintáctica en Python:
para
utilizar
la
mencionada
>>> l…
78/381
>>> matriz = [0][1]
Asimismo, podemos cambiar un elemento directamente:
>>> matriz[0][1] = 33>>> m
79/381
[[1, 33, 3],[4, 5, 6]]
80/381
DICCIONARIOS
Un diccionario es una estructura de datos que almacena una seriede valores
utilizand…
81/381
Como hemos visto previamente, para acceder a los elementos delas listas y
las tuplas, hemos utiliz…
82/381
...valor=1valor=2valor=3
Por defecto, si iteramos sobre un diccionario con un bucle for, obtendrem…
83/381
>>> 'x' in diccionarioFalse
Comprensión
De forma similar a las listas, los diccionarios pueden ta…
84/381
SENTENCIAS DE CONTROL,MÓDULOS Y FUNCIONES
INTRODUCCIÓN
Las sentencias de control es uno de los pr…
85/381
PRINCIPALES SENTENCIAS DE CONTROL
Al igual que otros lenguajes de programación, Python incorporaun…
86/381
Como el lector habrá podido observar y a diferencia de otroslenguajes de
programación, los parénte…
87/381
ejecutadas las sentencias que pertenecen al else al finalizar el bucle.
Acontinuación, veamos un e…
88/381
comprobaremos cómo la última sentencia print es ejecutada.Además de
break, otra sentencia asociada…
89/381
operación siempre es recomendable cerrar el fichero. Gracias a with esto
ocurrirá automáticamente,…
90/381
FUNCIONES
En programación estructurada, las funciones son uno de loselementos
básicos. Una funció…
91/381
Una vez que salvemos el fichero con el código, ejecutaremos elprograma
desde la línea de comandos …
92/381
Efectivamente, al pasar como argumento una lista, que es demutable, y
modificar uno de sus valores…
93/381
A pesar de ser el comportamiento por defecto, es posible nomodificar el
parámetro mutable pasado c…
94/381
Dada la anterior función, las siguientes sentencias son válidas:
>>> fun(1, 2, 4)>>> fun(a=1, b=2,…
95/381
tratados como tal. El siguiente ejemplo nos muestra cómo empleareste
operador en la cabecera de un…
96/381
1 2 3
En lugar de una tupla, el operador ** se basa en el uso de undiccionario.
Tomando como ejem…
97/381
>>> fun(1, 3)Traceback (most recent cali last):File "<stdin>", line 1, in
<module>TypeError: fun()…
98/381
En la práctica, la utilidad de las funciones lambda es que nospermite definir
una función directam…
99/381
>>> new_li = map(lambda x: x+2, li)>>> for item in new_li:
print(item)...34
5
Tipos mutables com…
100/381
consistente en utilizar el valor None por defecto para nuestroparámetro y en
crear una lista vacía…
101/381
MÓDULOS Y PAQUETES
La organización del código es imprescindible para su
eficientemantenimiento y …
102/381
first.say_hello()
Ahora utilizaremos el intérprete para ejecutar este último scriptcreado.
Desde …
103/381
from first import say_hello, say_bye
Adicionalmente, un módulo puede ser importado para serreferen…
104/381
ejecución del código del módulo importado. Esta es la razón por lacual se
ejecuta la sentencia pri…
105/381
>>> import sys>>>
sys.path['','C:\\Windows\\system32\\python32.zip','C:\\Python32\\DLLs',
'C:\\Py…
106/381
del mismo nuestros scripts first.py y second.py. Por último, crearemosun
fichero vacío llamado __i…
107/381
entender el funcionamiento del código, tanto para otrosprogramadores,
como para nosotros mismos. E…
108/381
de una lista que contiene dos elementos. Si intentamos acceder a lalista
utilizando el valor de ín…
109/381
try:
<li [2]except:<print("Error: índice no válido")else:<print("Sin
error")finally:<print("Bloqu…
110/381
cómo implementar una clase y cómo funciona la herencia. El
siguientecapítulo está dedicado a cómo …
111/381
Python nos permite trabajar con la información generada cuando seproduce
una excepción. Esto puede…
112/381
ORIENTACION A OBJETOS
INTRODUCCIÓN
Entre los paradigmas de programación soportados por Pythondest…
113/381
que presenta Python con respecto a otros lenguajes a la hora detrabajar con
el paradigma de la OOP…
114/381
CLASES Y OBJETOS
Hasta ahora hemos utilizado indistintamente el concepto de objetocomo
tipo o est…
115/381
utilizando la siguiente línea de código:
a = First ()
Al igual que otros lenguajes de programació…
116/381
mencionada referencia. Como ejemplo, modifiquemos nuestra
claseañadiendo el siguiente método:
def…
117/381
nombres del método en cuestión. Para ilustrar este
comportamiento,añadamos el siguiente nuevo méto…
118/381
Relacionados con los atributos, también existen en Python lasvariables de
clase. Estas se caracter…
119/381
estos atributos requieren de un procesamiento inicial en el momentode ser
accedidos. Para implemen…
120/381
Seguro que los programadores de Java están habituados a utilizarmétodos
setters y getters para acc…
121/381
@radio.setterdef radio(self, radio):self. radio = radio
Ahora veremos cómo emplear nuestra clase c…
122/381
no impide su acceso. Trabajemos con un sencillo ejemplo, declarandouna
clase y su correspondiente …
123/381
La técnica del name mangling se diseñó en Python para asegurarque una
clase hija no sobrescribe ac…
124/381
se pueden utilizar parámetros adicionales para el método de clase. Loque sí
que es importante que …
125/381
El comportamiento anteriormente explicado tiene sentido, ya que,en
realidad, Python no tiene modif…
126/381
>>> t = Test()>>> t.metodo_ estático (33)Valor: 33
Echando un vistazo al código anterior, podemos …
127/381
que, por defecto, contendrán todas las clases que creemos. Enrealidad,
cualquier clase que creemos…
128/381
El método __new__() fue diseñado para permitir la personalizaciónen la
creación de instancias de c…
129/381
def __init__(self, x):self.x = x
La invocación a la creación de un objeto de la clase que contendr…
130/381
constructor. Sin embargo, esta situación varía si empleamos la consolade
comandos y creamos la ins…
131/381
Con la información devuelta por la función repr podríamos crear unnuevo
objeto con los mismos valo…
132/381
Es decir, podemos indicar, valores como, por ejemplo, la alineación dela
cadena de texto producida…
133/381
esta simple afirmación, escribiremos el código del método que seencargará
de realizar la comprobac…
134/381
>>> t.__hash__()39175112>>> hash(t)39175112>>> x = TestHash()>>>
x__hash__()2448448>>> hash(x)2448…
135/381
HERENCIA
El concepto de herencia es uno de los más importantes en laprogramación
orientada a obje…
136/381
apartados.
Simple
La herencia simple consiste en que una clase hereda únicamente deotra.
Como he…
137/381
def __init__(self):print("Constructor hija")>> z = Hija()Constructor hija
Pero no solo los métodos…
138/381
Múltiple
Como hemos comentado previamente, Python soporta la herenciamúltiple,
del mismo modo que…
139/381
Teniendo en cuenta esta figura, Python crearía la lista de clases D, B,A, C,
A. Después eliminaría…
140/381
Fig. 4-1 El problema del diamante
141/381
Dadas las ambigüedades que pueden surgir de la utilización de laherencia
múltiple, son muchos los …
142/381
POLIMORFISMO
En el ámbito de la orientación a objetos el polimorfismo hacereferencia a la
habilid…
143/381
permitir y facilitar el uso del polimorfismo. Por ejemplo, Java cuentacon las
clases abstractas, q…
144/381
INTROSPECCIÓN
La instrospección o inspección interna es la habilidad que tiene
uncomponente, como…
145/381
isinstance() y hasattr(). La primera de ellas nos sirve para comprobar siuna
variable es instancia…
146/381
Obviamente, aunque las clases Intro e Hijo estén relacionadas
sondiferentes. Sin embargo, la funci…
147/381
pasamos como primer argumento una instancia de cualquier de ellas ycomo
segundo el nombre de una d…
148/381
de instancia, seguido de un punto y del nombre del atributo encuestión. Sin
embargo, los métodos _…
149/381
PROGRAMACIÓN AVANZADA
INTRODUCCIÓN
En este capítulo nos adentraremos en una serie de aspectosavan…
150/381
ITERATORS Y GENERATORS
Python cuenta con dos mecanismos específicos que nos permiteniterar
sobre …
151/381
comentado previamente. Aunque contamos con un capítulo dedicadoa cómo
trabajar con distintos tipos…
152/381
inferior a cero deberemos detener la iteración. Para ello, contamos conla
excepción StopIteration,…
153/381
A diferencia de las versiones 2.x de Python, la serie 3 de estelenguaje
cuenta con una serie de fu…
154/381
este hecho, vamos a reescribir nuestro primer ejemplo de iterator
empleando una simple función que…
155/381
A diferencia de otros objetos, la iteración sobre un generator solo sepuede
hacer una única vez. S…
156/381
CLOSURES
En Python es posible anidar una función dentro de otra. Unafunción no es
más que un obje…
157/381
mente, podemos invocar a la función principal() y asignar su resultadoa una
variable:
>>> res = p…
158/381
enfoque. Además, necesitamos realizar una serie de acciones enfunción del
texto que la caja conten…
159/381
DECORATORS
En el capítulo anterior, hemos descubierto cómo utilizar un decorator, para
por ejempl…
160/381
que las funciones implementadas pueden ser utilizadas comodecoradores en
otras funciones de nuestr…
161/381
Decorators en clases
Para ilustrar el funcionamiento de la aplicación de decoradoresutilizando
cl…
162/381
esto es simplemente lo que ocurre. Continuando con la ejecución de
__call__() , se imprime el últi…
163/381
def nueva():print("ini", f.__name__)f()print("fin", f.__name__)return nueva
El siguiente paso es d…
164/381
invocar a una función decorada pasando a su vez un númerodeterminado de
parámetros. Es más, se pue…
165/381
sencillo. Simplemente hemos tenido en cuenta los mismos al igual queen
una función convencional.
…
166/381
ini wrapped_fdecorator args: 1 2 3fun args: p1 p2fin wrapped_f
En la salida anterior comprobaremos…
167/381
PROGRAMACIÓN FUNCIONAL
Tanto la orientación a objetos como la programación procedural,son dos de
…
168/381
["hola", "mundo", "adios"]
El mismo ejemplo podría haber sido realizado utilizando lacomprehensión…
169/381
Los números en negrita representan los elementos de la lista y elcódigo
completo para realizar la …
170/381
EXPRESIONES REGULARES
Las expresiones regulares definen una serie de patrones que seutilizan para
…
171/381
Patrón Significado
 Cualquier carácter excepto el que representa una nueva línea
\n Nueva línea
…
172/381
^ Inicio de cadena
$ Fin de cadena
\ Escape para caracteres especiales
[] Rango. Cualquier carác…
173/381
Supongamos que estamos buscando en una cadena de texto unpatrón que
corresponde a un determinado n…
174/381
La función básica de la que dispone el módulo re de Python es search().
Esta función recibe como a…
175/381
<_sre.SRE_Match object at 0x00000000021A15E0>
Efectivamente, la simple cadena de texto "o" es por …
176/381
¿Qué ocurre si el patrón no coincide con ninguna parte de lacadena donde
se realiza la búsqueda? S…
177/381
>>> re.search(r" ^hola$", "adiosholaadios")>>> re.search(r"hola",
"adiosholaadios")<_sre.SRE_Match…
178/381
número de ocurrencias que deben ser reemplazadas, por defecto
sereemplazarán todas las que se encu…
179/381
Separaciones
Interesante es la también función split() ofrecida por el módulo
paraexpresiones reg…
180/381
Para ver cómo funcionan las búsquedas utilizando el modificador
MULTILINE, buscaremos un determina…
181/381
^.*\// UNIX path
^([0-9afA-F]{2}:){5}[0-9afA-F]{2}$ Dirección MAC
Cuenta de
182/381
^[0-9a-zA-Z]([-.\w] * [0-9a-zA-Z_+]) * @([0-9a- zA-Z][-\w] * [0-9a-zAZ]\.)+[a-zA-Z{2,9}$
correoel…
183/381
ORDENACIÓN DE DATOS
En el presente apartado nos centraremos en aprender cómoordenar datos. La
fun…
184/381
que debe emplear la función sort(), podremos hacerlo gracias alparámetro
key que acepta esta funci…
185/381
>>> lista = [("Madrid", 4), ("Barcelona", 1), ("Sevilla", 5),("Valencia", 3)]
[("Madrid", 4), ("Ba…
186/381
class Empleado:def __init__(self, apellidos, puesto, edad):self.apellidos =
apellidosself.puesto =…
187/381
FICHEROS
INTRODUCCIÓN
Los sistemas operativos almacenan los datos de forma estructuradaen unas
u…
188/381
ser empleado para guardar información relativa a una
determinadaconfiguración. También en este cap…
189/381
OPERACIONES BÁSICAS
Python incorpora en su librería estándar una estructura de datosespecífica
pa…
190/381
>>> fich = open("fichero.txt")
En nuestro ejemplo, hemos supuesto que el fichero creado seencuentr…
191/381
determinado enfunción de la operación (lectura, escritura, añadir y
lectura/escritura) y
192/381
otro para señalar si el fichero es de texto o binario. Obviamente,ambos tipos
de valores se pueden…
193/381
aprender cómo leer y escribir datos.
Lectura y escritura
La operación básica de escritura en un f…
194/381
ello, Python nos ofrece tres métodos diferentes. Elprimero de ellos es
read(), el cual lee el cont…
195/381
devuelve un única cadena de texto. El segundo en cuestión es readline() que
se ocupa de leer línea…
196/381
... print (fich.read())...Primera líneaSegunda línea
Hasta el momento, nuestros ejemplos se han re…
197/381
valores: 0 (comienzo del fichero), 1 (posición actual) y 2 (fin de
fichero).Por defecto, si no se …
198/381
SERIALIZACIÓN
La serialización es un proceso mediante el cual una estructura dedatos es
codificad…
199/381
posible deserializar aquellos objetos señalizados con este móduloempleando
otros lenguajes de prog…
200/381
Ejemplo práctico
Básicamente, para serializar objetos en Python, a través del módulo pickle,
empl…
201/381
Para llevar a cabo el proceso inverso, es decir, la deseríalízacíón,
esnecesario invocar al método…
202/381
FICHEROS XML, JSON Y YAML
Con la serialización se encuentran relacionados una serie deformatos de
…
203/381
for XML). La primera de ellas se basa en utilizar y tratar los datosbasándose
en una estructura de…
204/381
mostrar la información relativa a los diferentes títulos que
contiene,empleando para ello los dife…
205/381
El último de nuestros ejemplos muestra cómo emplear el métodoSAX para
recorrer nuestro fichero e i…
206/381
procesamiento y memoria requerida para su análisis.
JSON
El formato JSON se ha convertido en uno …
207/381
funciones de ficheros de Python podemos leer y escribir ficheros
quecontengan datos en este format…
208/381
'w')new_fich.writeline(cad)new_fich.close()
Si abrimos el nuevo fichero albums_new.json y echamos …
209/381
su contenido, encontraremos el siguiente texto en formato JSON:
{"albums": {"títulos": ["Achtung B…
210/381
puerto: 8003
Python no dispone de ningún módulo en su librería estándar paratrabajar
con ficheros…
211/381
>>> data['producción'] ['puerto']8003
212/381
Por otro lado, la estructura puede ser modificada y crear con ella unnuevo
fichero YAML. Supongamo…
213/381
FICHEROS CSV
El formato CSV (Comma Separated Values) es uno de los máscomunes y
sencillos para al…
214/381
... print("Apellido: {O}; Nombre: {1}; Departamento: {2};Ciudad:
{3}".format(row[0], row[1], row[2…
215/381
Martinez$Juan$Administracion$BarcelonaLopez$Maria$Finanzas$Valenci
a
Finalizamos en este punto nu…
216/381
ANALIZADOR DE FICHEROS DE CONFIGURACIÓN
En los sistemas Windows es muy popular el formato INI, que…
217/381
>>> config.read("config.ini")
Ahora podemos, por ejemplo, obtener una lista con todas lassecciones…
218/381
Si ahora abrimos nuestro fichero INI con cualquier editor de
textos,comprobaremos cómo contiene la…
219/381
Formato ZIP
El nombre del módulo de la librería estándar que nos permitetrabajar con
este formato…
220/381
Filenameempleados.csvfich.txttest.dat
Modified2012-01-07 21:47:142012-02-07 22:32:022012-03-07 20:…
221/381
reside en que el primer método lo hace sobre todos y cadauno de los
ficheros que forman parte del …
222/381
recibir como parámetro uno de los ficheros para devolver lainformación
relativa al mismo. Entre la…
223/381
Para crear un fichero comprimido a partir de un fichero original,basta con
abrir el fichero origin…
224/381
Esta representa a un fichero con este tipo de compresión y dispone
demétodos para crear, leer, com…
225/381
añadido compresión empleando gzip o bz2. En realidad, tar nocomprime
por sí mismo, simplemente agr…
226/381
>>> ftar.list()rw-rw-rw- 0/0 133 2012-01-07 21:47:14rw-rw-rw- 0/0 9
2012-02-07 22:32:0rw-rw-rw- 0/…
227/381
BASES DE DATOS
INTRODUCCIÓN
No cabe duda de que las bases de datos juegan un papel muyimportante …
228/381
interactuar con una base de datos con independencia de cuál sea sumotor.
Esto permite desarrollar …
229/381
RELACIONALES
Previamente a descubrir cómo interactuar con los gestores de basesde datos
relaciona…
230/381
Tabla 7-1. Tabla con información sobre países
Antes de continuar, es conveniente crear una nueva b…
231/381
'moneda' VARCHAR(30) NOT NULL,PRIMARY KEY ('id’))
Debemos tener en cuenta que la anterior sentenci…
232/381
La función connect() recibe como parámetros el nombre de lamáquina que
está ejecutando el gestor d…
233/381
rows:print(row)
'España', 'Europa', 47, 'Euro')'Alemania', 'Europa, 82, 'Euro')
234/381
El método fetchall() extrae todos los registros que cumplen con lacondición
especificada, si asign…
235/381
Si el método fetchone() es lanzado sobre un cursor que devuelvemás de un
resultado, solo el primer…
236/381
estaremos consumiendo recursos innecesariamente y el rendimientode la
aplicación bajará considerab…
237/381
Para lanzar una sentencia SQL, también necesitamos contar con elobjeto
cursor, así pues, obtendrem…
238/381
>>> cursor = con.cursor()
El método execute() es el encargado de lanzar las sentencias SQL,sirva
…
239/381
correspondiente licencia de software.Desde Python también podemos
trabajar con bases de datosgesti…
240/381
A la hora de utilizar prepared statements, el módulo cxOracle lohace de
forma diferente a MySQLdb …
241/381
para pasar los parámetros necesarios. De esta forma, el siguienteejemplo
muestra cómo parametrizar…
242/381
limitados. Por otro lado, una base de datos SQLite3está compuesta por un
único fichero binario.
243/381
A diferencia de los casos anteriormente explicados para Oracle,MysQL y
PostgreSQL, para conectarno…
244/381
Dos son los ORM más utilizados en Python: SQLAlchemy y SQLObject.
Ambos son similares en funcional…
245/381
estableciendo relaciones entre ellas que luego serán traducidas en labase de
datos empleando clave…
246/381
>>> cad_con = 'mysql://usuario:password@localhost/prueba'>>> engine =
create_engine(cad_con)
Las …
247/381
Conectándonos a la base de datos podremos comprobar que,efectivamente,
la nueva tabla ha sido crea…
248/381
operaciones para interactuar con ella deben ser ejecutadas a través deuna
instancia específica de …
249/381
instancia e invocar al método commit(), tal y como muestrael siguiente
código:
>>> p.habitantes =…
250/381
>>> session.commit()
Una vez aprendido lo básico sobre la utilización de SQLAlchemy, eshora de
co…
251/381
de la clase en cuestión es como sigue:
252/381
>>> class Pais(sqlobject.SQLObject):... nombre =
sqlobject.StringCol(length=100)... continente =
…
253/381
líneas:
254/381
>>> p.set(habitantes=67)>>> p = Pais.get(1)>>> p.habitantes67
La consulta de registros puede ser l…
255/381
Facebook o Twitter.Básicamente, una base de datos NoSQL almacena una
serie depares claves:valor y,…
256/381
>>> con = redis.StrictRedis(host='localhost', port=6379, db=0)
Los tres parámetros pasados al cons…
257/381
Aprendido lo básico para interactuar con una base de datos Redis desde
Python, continuaremos descu…
258/381
MongoDB
El módulo más popular para trabajar con MongoDB desde Pythones el
llamado PyMongo. Este p…
259/381
Para comprobar que el documento ha sido insertadocorrectamente, basta
con invocar al método find_o…
260/381
conceptos de keyspace y column familiy para almacenar la informaciónde
forma estructurada. Al fin …
261/381
Ahora ya estamos listos para insertar nuestro primer registro; paraello,
emplearemos el método ins…
262/381
clave:valor que deseamos insertar. Veamos cómo el siguiente códigonos
servirá para insertar un nue…
263/381
INTERNET
INTRODUCCIÓN
En este capítulo nos ocuparemos de aquellos aspectos másrelevantes
relacio…
264/381
realizar un exhaustivo análisis de todos los módulos, herramientas
ycomponentes existentes y relac…
265/381
TELNET Y FTP
Dos de los más utilizados protocolos en Internet para interactuarcon
servidores son …
266/381
al puerto estándar (23) para TELNET.Antes de comenzar a ver los ejemplos
de código de utilización …
267/381
>>> tel.read_until(b'login: ')'\r\r\nDarwin/BSD (yoda.local)
(ttysOOO)\r\r\n\r\r\nlogin:'
268/381
En cuanto el servidor responda, deberemos mandar el nombre deusuario
para hacer login, para ello c…
269/381
>>> tel. read_all ()'\r\nLast login: Mon Feb 20 17:10:37 on
ttys003\r\n[arturo@yoda
~\xlb[0;32m]\…
270/381
top\t\t\t\tftdetect\r\nDocuments\t\t\tftplugin[arturo@yoda~\x1b[0;32m]\x1b[
0;37m $\r [arturo@yoda…
271/381
>>> from ftplib import FTP>>> con = FTP('ftp.miservidor.com')
En cuanto tengamos creada la instanc…
272/381
>>> fich.close()
Efectivamente, para abrir nuestro fichero hemos empleado b como flag para
indica…
273/381
Para trabajar con directorios dentro del servidor existen diferentesmétodos,
como son cwd(), pwd()…
274/381
XML-RPC
El protocolo XML-RPC se basa en la utilización de la invocaciónremota a
funciones o métod…
275/381
cual recibirá como parámetro una cadena de texto y devolverá unsencillo
mensaje, concatenando la c…
276/381
el método register_function(). Si no registramos la función,no será posible
su invocación. No olvi…
277/381
importante. A continuación, el código necesario que define nuestrafunción
y que la registra en el …
278/381
estos clientes en Python de estaforma, descubriremos cómo el módulo
xmlrpc.client puede ayudarnosa…
279/381
xmlrpc.client
En Python el módulo xmlrpc.client de su librería estándar nos ofreceuna
serie de fu…
280/381
>>> cli.say_bye('Lucas')Bye, bye Lucas
Si en lugar de emplear el intérprete de Python desde la lín…
281/381
CORREO ELECTRÓNICO
De los servicios utilizados a través de Internet, sin duda el correoelectrónico…
282/381
un buzón y, cómo no, obtener los correos recibidos.Para comenzar a trabajar
con poplib, lo primero…
283/381
>>> i = 0>>> for i in range(num):
284/381
.........
for mensaje in servidor.retr(i+1)[1]:print(mensaje)
En cuanto terminemos de realizar la…
285/381
No olvidemos que GMail emplea como usuario de correo elnombre seguido
de la arroba más el dominio.…
286/381
Una vez que tenemos la conexión realizada, si el servidor así lorequiere,
será necesario pasar el …
287/381
Otro método análogo al set debuglevel() de poplib es el homónimoque
existe en smtplib. La invocaci…
288/381
Layer Security) para aquellos servidores que lo requieran.Adicionalmente,
smtplib cuenta también c…
289/381
podemos pasar al mencionado constructor diferentes valores paraestos
parámetros, siendo el primero…
290/381
>>> tip, data = con.search(None, ’FROM','"prueba@miservidor.com"')
Volviendo a nuestra llamada ant…
291/381
WEB
La web es uno de los servicios que más peso tiene en Internet, juntocon el
correo electrónico…
292/381
como es el caso de los servlets de Java, Rack para Ruby, mod_php paraPHP
y WSGI para Python.En oca…
293/381
vars = cgi.FieldStorage()nombre = vars.getvalue('nombre')
print("Content-type: text/html")print()p…
294/381
ejecuta para llevar a cabo una serie de inicializaciones necesarias
paratrabajar con CGI. Con la p…
295/381
responder a las mismas generando contenido que pueda ser leído porun
navegador web. Nuestro sencil…
296/381
$python servidor_wsgi.pyLanzando servidor en puerto 8080...
Si abrimos nuestro navegador y nos con…
297/381
un documento HTML y ser capaces de extraer información analizandolas
distintas etiquetas que conti…
298/381
con invocar al método open() del objeto HTTPResponse, que a su vezfue
devuelto por la función urlo…
299/381
versión 10.6.8 de Mac OS X.El código Python necesario para ello sería el
siguiente:
>>> opener = …
300/381
Mozilla/5.0 (Macintosh; U; Intel Mac
OS X 10_6_8) ')])>>> opener.open(url)
Efectivamente, al méto…
301/381
módulo es un binding para Python de las populareslibrerías libxml2 y
libxslt, escritas ambas en el…
302/381
programación C. Haciendo uso de la estructura ElementTree y
lascorrespondientes clases y funciones…
303/381
>>> from lxml.html import fromstring>>> doc = fromstring(pagina)>>>
ele = doc.find_class('fiveday-…
304/381
ellos, nos dedicaremos a ver qué puede ofrecernos cada uno en
líneasgenerales.
PYRAMID
El proyec…
305/381
haciendo gala de su carácter minimalista, la creación de aplicacionesweb
utilizando un único fiche…
306/381
será necesario llevar a cabo ninguna acción adicional.En cuanto finalice la
instalación podremos c…
307/381
código que necesitamos:
app = config.make_wsgi_app()server = make_server('0.0.0.0', 8081, app)
308/381
server.serve_forever()
A través del primer y segundo parámetro de la función make_server()
hemos …
309/381
relacionales.Componentes incluidos el framework facilitan la obtención
deparámetros recibidos por …
310/381
INSTALACIÓN YDISTRIBUCIÓN DE PAQUETES
INTRODUCCIÓN
En capítulos anteriores nos hemos valido de ci…
311/381
puede ser un simple script escrito en este lenguaje, mientras que un paquete
es un conjunto de fic…
312/381
INSTALACIÓN DE PAQUETES
La instalación en nuestro sistema de paquetes Python desarrolladospor
ter…
313/381
obtener el fichero en el que está siendo distribuido, descomprimir elmismo
y ejecuta un comando de…
314/381
transparentemente el script setup.py. Sin embargo, existe unargumento que
puede ser pasado al menc…
315/381
$ python setup.py --install-scripts=/usr/local/bin/
Otro parámetro interesante, que también acepta…
316/381
servicio está accesible a través de Internet y es considerado elrepositorio
oficial de paquetes pa…
317/381
python distribute_setup.py
Dado que distribute es un módulo empaquetado siguiendo elestándar para
…
318/381
operativo que estemos utilizando, esinteresante que el script easy_install
sea accesible a través …
319/381
variable de entorno PATH. Si realizamos esta configuración, tanto enMac
OS X, como en Linux y Wind…
320/381
paquetes es la opción de Indicar el número de versión que deseamosinstalar
de un determinado paque…
321/381
PIP
322/381
El gestor de paquetes pip nació con la idea de ofrecer unaalternativa a
easy_install, que además, …
323/381
$ cd pip-1.0$ python setup.py install
La instalación de módulos en sistemas UNIX se realiza, por d…
324/381
último código que está siendodesarrollado. El parámetro -e , seguido de la
URL en cuestión, será el
325/381
que deberemos pasar al comando install para realizar este tipo
deinstalación. Por ejemplo, para in…
326/381
La desinstalación de módulos puede ser ejecutada fácilmentegracias al
comando uninstall, el cual s…
327/381
En este punto termina nuestro recorrido por la instalación depaquetes, en el
siguiente apartado tr…
328/381
DISTRIBUCIÓN
Para que otros desarrolladores puedan instalar y utilizar nuestrosmódulos de
Python,…
329/381
las siguientes líneas:
from distutils.core import setupsetup(name='hola', version='1.0',
py_modul…
330/381
creado el fichero de distribución, en nuestro caso, se llama hola-1.O.tar.gz.
Ya estamos preparado…
331/381
ejecutando las siguientes líneas de código:
>>> import hola>>> h = hola.Hola()>>> h.say_hello()Hol…
332/381
ENTORNOS VIRTUALES
Hasta el momento hemos aprendido a instalar paquetes en eldirectorio
asignado …
333/381
virtualenv
Para la gestión de entornos virtuales en Python, necesitamosinstalar un
módulo llamado…
334/381
pasoserá activarlo para poder comenzar a trabajar con él. Esta acción
selleva a cabo a través del …
335/381
directorio bin. En Linux, ejecutaríamos los siguientes comandos paraactivar
nuestro entorno recién…
336/381
mismo directorio del sistema de ficheros, activar un entorno a travésde un
nombre dado, permitir f…
337/381
podemos cambiar de uno aotro directamente a través del comando workon.
Este comando se
338/381
encargará tanto de desactivar el entorno actualmente activado, comode
activar el nuevo. Si ningún …
339/381
Tanto los gestores de paquetes, como los entornos virtuales,
sonherramientas muy útiles para el de…
340/381
10
341/381
PRUEBAS UNITARIAS
INTRODUCCIÓN
Una de las fases más importantes en el proceso del desarrollo deso…
342/381
implementación.En los últimos años, la amplia aceptación de metodologías
dedesarrollo como TDD ( T…
343/381
CONCEPTOS BÁSICOS
Para llevar a cabo las pruebas unitarias, es importante estarfamiliarizado
con …
344/381
pequeño módulo Python que contiene tres funciones diferentes. Eneste caso
se debería escribir un c…
345/381
UNITTEST
Python incorpora un módulo en su librería estándar que permiteescribir y
ejecutar prueba…
346/381
objeto es instancia o no de una determinada clase.Para ilustrar el
funcionamiento de unittest vamo…
347/381
..
Ran 1 test in 0.002sOK
La información obtenida hace referencia al número de pruebasejecutadas …
348/381
DOCTEST
Además de unittest, Python nos ofrece en su librería estándar otromódulo
para escribir y …
349/381
python lista.py -v
Por otro lado, si la prueba fallara, obtendríamos información alrespecto. Si
c…
350/381
OTROS FRAMEWORKS
Aparte de doctest y unittest existen otros frameworks para escribirpruebas
unita…
351/381
AEL ZEN DE PYTHON
TRADUCCIÓN DE "EL ZEN DE PYTHON"
Bonito es mejor que feo.Explícito es mejor que…
352/381
siguiente línea:
>>> import this
353/381
BCÓDIGO DE BUENASPRÁCTICAS
REGLAS
Es importante estructurar correctamente un proyecto. Crear unaa…
354/381
REFERENCIAS
CAPÍTULO 1. PRIMEROS PASOS
Sitio web oficial de Python: http://www.python.org/ Página…
355/381
Página web dedicada a 2to3, la herramienta para migrar de Python2.x a
Python 3: http://docs.python…
356/381
CAPÍTULO 3. SENTENCIAS DE CONTROL, MÓDULOS Y
FUNCIONES
Página web oficial de la librería estándar…
357/381
CAPÍTULO 4. ORIENTACIÓN A OBJETOS
Página de Wikipedia sobre orientación a objetos:
http://es.wiki…
358/381
CAPÍTULO 5. PROGRAMACIÓN AVANZADA
Modelo NFA tradicional:
http://en.wikipedia.org/wiki/Nondetermi…
359/381
CAPÍTULO 6. FICHEROS
Página oficial sobre el módulo csv:
http://docs.python.org/py3k/library/csv.…
360/381
CAPÍTULO 7. BASES DE DATOS
Sitio web de MySQL: http://www.mysql.com Documentación de referencia
d…
361/381
CAPÍTULO 8. INTERNET
Sitio web de WSGI: http://www.wsgi.org Información de referencia del
módulo …
362/381
CAPÍTULO 9. INSTALACIÓN Y DISTRIBUCIÓN DE PAQUETES
Sitio web de PyPi: http://pypi.python.org/pypi …
363/381
CAPÍTULO 10. PRUEBAS UNITARIAS
Documentación oficial del módulo unittest: http://
http://docs.pyt…
364/381
ÍNDICE ALFABÉTICO
-
__call__() 113, 115__iter__() 105__name__() 113, 114, 116, 210, 245,
246__ne…
365/381
CSV 6, 134, 150, 151, 152
D
decode() 34decorador 80, 81, 84, 86, 111, 112, 113, 114, 115, 116, 11…
366/381
G
garbage collector 6, 89 generators 103, 107, 118, 119Guido van Rossum 2,
3gzip 134, 155, 157, 1…
367/381
lista 21, 22, 26, 30, 36, 40, 41, 42, 43, 44, 45, 48, 49, 53, 56, 57, 58, 63,64,
65, 68, 71, 97, 1…
368/381
240, 247, 258paso de parámetros 56, 57, 58, 61, 115, 116pdb 18, 254 pickle
140, 141, 142 pickling …
369/381
S
SAX 143, 144, 145, 146 Scripts 4, 65, 68, 69, 181, 194, 206, 207, 224, 230,
237, 247 seek() 138…
370/381
upper() 36
V
values() 21, 47, 48variable de entorno PATH 14, 224, 227variables de
instancia 78, …
371/381
372/381
Ta
bleofContents
page-001
page-002
page-003
page-004
page-005
page-006
page-007
page-008
…
373/381
page-035
page-036
page-037
page-038
page-039
page-040
page-041
page-042
page-043
page-044
…
374/381
page-072
page-073
page-074
page-075
page-076
page-077
page-078
page-079
page-080
page-081
…
375/381
page-109
page-110
page-111
page-112
page-113
page-114
page-115
page-116
page-117
page-118
…
376/381
page-146
page-147
page-148
page-149
page-150
page-151
page-152
page-153
page-154
page-155
…
377/381
page-183
page-184
page-185
page-186
page-187
page-188
page-189
page-190
page-191
page-192
…
378/381
page-220
page-221
page-222
page-223
page-224
page-225
page-226
page-227
page-228
page-229
…
379/381
page-257
page-258
page-259
page-260
page-261
page-262
page-263
page-264
page-265
page-266
…
380/381
page-294
page-295
page-296
page-297
page-298
page-299
page-300
page-301
page-302
page-303
…
381/381


  • Previous
  • Next
  • f Fullscreen
  • esc Exit Fullscreen
@ProfGastonPerez

Share

Python 3 al descubierto

Embed code

Report Inappropriate Content on Jaunt

Choose the reason you are reporting: Python 3 al descubierto as inappropriate to Jaunt's content team.


Swipe LEFT
to view Related

Scroll DOWN
to read doc

We, and our third-party partners, use cookies, pixels, and other technologies (“cookies”) to collect, record, and share information you provide, as well as information about your interactions with, our site for ad targeting, analytics, personalization, and site functionality purposes. By clicking Allow All, you agree to the use of tracking technologies and acknowledge our privacy practices as described in our Privacy Notice.

Cookies to automatically collect, record, and share information about your interactions with our site for analytics purposes.
Cookies used to enable advertising on our site.

Login

OR

Forgot password?

Don't have an account? Sign Up