Python Avanzado U1
Python Avanzado U1
Python Avanzado U1
DIPLOMATURA EN PYTHON
Centro de e
e-Learning SCEU UTN - BA.
Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e
www.sceu.frba.utn.edu.ar/e-learning
p. 2
Centro de e
e-Learning SCEU UTN - BA.
Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e
www.sceu.frba.utn.edu.ar/e-learning
p. 3
Presentación:
Hasta ahora hemos trabajado con cadenas de te texto sin entrar mucho en detalle en su
trasfondo y nos hemos conectado con bases de datos como MySQL, SQLite3 o Shelves
Shelves.
En el transcurso de esta unidad nos centraremos en dos puntos muy interesantes antes
de comenzar a ver en las siguientes unidades como pyth
python
on funciona internamente.
Centro de e
e-Learning SCEU UTN - BA.
Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e
www.sceu.frba.utn.edu.ar/e-learning
p. 4
Objetivos:
Que los participantes:
Puedan pasar de un formato a otro y leer archivos con diferente tipo de contenido.
Centro de e
e-Learning SCEU UTN - BA.
Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e
www.sceu.frba.utn.edu.ar/e-learning
p. 5
Bloques temáticos:
1.- Uso de ORM
4.- Strings.
8.- bytearray
Centro de e
e-Learning SCEU UTN - BA.
Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e
www.sceu.frba.utn.edu.ar/e-learning
p. 6
Es importante que todos los participantes realicen algunas de las actividades sugeridas y
compartan en los foros los resultados obtenidos.
El carácter constructivista y colaborativo del MEC nos exige que todas las actividades
realizadas por los participantes sean compartidas en los foros.
Centro de e
e-Learning SCEU UTN - BA.
Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e
www.sceu.frba.utn.edu.ar/e-learning
p. 7
Tomen nota
Las actividades son opcionales y pueden realizarse en forma individual, pero siempre es
deseable que se las realice en equipo, con la finalidad de estimular y favorecer el trabajo
colaborativo y el aprendizaje entre pares. Tenga en cuenta que, si bien las actividades
son opcionales, su realización es de vital importancia para el logro de los objetivos de
aprendizaje de esta instancia de formación. Si su tiempo no le permite realizar todas las
actividades, por lo menos realice alguna, es fundamental que lo haga. Si cada uno de los
participantes realiza alguna, el foro, que es una instancia clave en este tipo de cursos,
tendrá
ndrá una actividad muy enriquecedora.
Asimismo, también tengan en cuenta cuando trabajen en la Web, que en ella hay de todo,
cosas excelentes, muy buenas, buenas, regulares, malas y muy malas. Por eso, es
necesario aplicar filtros críticos para que las investigaciones y búsquedas se encaminen a
la excelencia. Si tienen dudas con alguno de los datos recolectados, no dejen de consultar
al profesor-tutor.
tutor. También aprovechen en el foro proactivo las opiniones de sus
compañeros de curso y colegas.
Centro de e
e-Learning SCEU UTN - BA.
Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e
www.sceu.frba.utn.edu.ar/e-learning
p. 8
El Django ORM
Peewee
SQLAlchemy
PonyORM
SQLObject
Tortoise ORM
En esta unidad veremos cómo trabajar con “Peewee”, el cual es un ORM de muy fácil
implementación. Lo haremos mediante la creación de una aplicación que nos permita
realizar un ABMC de datos. Esta aplicación tiene e
ell objetivo de partir de una app conocida
que hemos trabajado en el nivel intermedio y hacer un repaso de lo aprendido a la vez
que introducimos nuevos conocimientos. Los puntos a repasar son:
Importación de módulos.
Centro de e
e-Learning SCEU UTN - BA.
Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e
www.sceu.frba.utn.edu.ar/e-learning
p. 9
Recomendación Importante
Importante:: El alumno puede utilizar esta aplicación para chequear
sus conocimientos previos, si alguno de los puntos anteriores no ha quedado claro, se
recomienda que el alumno cree una consulta en el foro y se lo haga saber al docente
antes de seguir avanzando.
Un título
Centro de e
e-Learning SCEU UTN - BA.
Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e
www.sceu.frba.utn.edu.ar/e-learning
p. 10
Los datos de los temas se han agregado en un módulo aparte y guardado en una base
del tipo shelve.
2. La línea 5 nos permite utilizar el método “SqliteDatabase() para crear una base de
datos del tipo SQLite3, se puede consultar la bibligrafía online, si deseamos
trabajar con otro tipo
po de base de datos, desde manual online, disponible en el
siguiente link: https://peewee.readthedocs.io/en/2.0.2/peewee/overview.html
https://peewee.readthedocs.io/en/2.0.2/peewee/fields.htm
https://peewee.readthedocs.io/en/2.0.2/peewee/fields.html
Notar que con un simple parámetro como “unique = True” podemos hacer que un
atributo del tipo “CharField()” el cual equivale a un campo de tipo string no pueda
tener campos repetidos. Esto nos evita tener que implementar una regex para la
validación del código.
base_datos.py
1 from peewee import *
2 import datetime
3
4 try:
5 db = SqliteDatabase('nivel_avanzado.db')
6
7 class BaseModel(Model):
8 class Meta:
9 database = db
10
11 class Noticia(BaseModel):
12 titulo = CharField(unique = True
True)
13 descripcion = TextField()
14 fecha = DateTimeField(default=datetime.datetime.now
DateTimeField(default=datetime.datetime.now)
15 estado_de_publicacion = BooleanField(default=True)
16 db.connect()
17 db.create_tables([Noticia])
18
19 except:
20 print("mmmm")
Centro de e
e-Learning SCEU UTN - BA.
Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e
www.sceu.frba.utn.edu.ar/e-learning
p. 12
guardarModal.py
1 from tkinter import *
2 from guardar import *
3 from base_datos import *
4
5 def guarda(variables, popupGuardar, elobjeto):
6
7 popupGuardar.destroy()
8 lista = []
9 for variable in variables:
10 lista.append(variable.get())
11 noticia = Noticia()
12 noticia.titulo = lista[0]
13 noticia.descripcion = lista[1]
14 noticia.save()
15 elobjeto.mostrar()
Centro de e
e-Learning SCEU UTN - BA.
Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e
www.sceu.frba.utn.edu.ar/e-learning
p. 13
eliminarModal.py
1 from tkinter import *
2 from guardar import *
3 from base_datos import *
4
5 def elimina(variables, popupEliminar, elobjeto):
6 popupEliminar.destroy()
7 lista = []
8 for variable in variables:
9 lista.append(variable.get())
10
11 borrar = Noticia.get(Noticia.id == lista[0])
12 borrar.delete_instance()
13
14 elobjeto.mostrar()
Centro de e
e-Learning SCEU UTN - BA.
Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e
www.sceu.frba.utn.edu.ar/e-learning
p. 14
Byte
Un byte es un indicador de la cantidad memoria utilizada, la información es almacenada
en ceros y unos, en donde cada elemento cero o uno es denominado bite. En la
convención que vamos a ver, un byte podemos tomarlo como 8 bits. Dado que un bite
posee solo dos estados (cero o uno) se utiliza con ellos aritmética de base 2. Antes de
seguir con la definición de tipos de variables detengámonos un momento y aprendamos
un poco sobre números binarios.
Números binarios.
Los números binarios se conforman con ceros y unos (0,1), en un circuito de lógica binaria
un cero significa voltaje cero, y un uno voltaje máximo donde podemos simbolizar como
apagado y prendido.
Los números son representados por potencia de dos (2), y veremos cómo se transforman
estos en decimales.
les. Partamos por escribir las potencias de dos en una tabla:
Colocaremos un 1 en el lugar de mayor valor que podamos sin pasarnos del valor pedido
en este caso 2^7 =128, seguimos poniendo un 1 en el lugar de mayor valor siempre que
no supere su suma 128+64=192, si colocamos un 1 en la columna de 2^5 =32 nos
pasaremos del valor pedido 128+64+32=224, por lo tanto colocaremos un cero, tomamos
Centro de e
e-Learning SCEU UTN - BA.
Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e
www.sceu.frba.utn.edu.ar/e-learning
p. 15
el siguiente valor 16, su suma no alcanza el valor, su suma 128+64+16=208 por lo tanto
colocamos un 1, sumaremos la siguiente columna 8 tendremos 128+64+16+8=216 no
superamos el número mero colocamos un 1, el próximo es 4 sumándolo tendremos
128+64+16+8+4=220
8+64+16+8+4=220 ya obtuvimos el valor no necesitamos sumar ningún valor,
colocaremos un cero en la potencias siguientes.
Otra manera de obtener el binario es el siguiente, dividimos por dos el núm número y
colocamos el resto (que puede ser cero o uno) a la derecha se repite la operación hasta
que quede el ultimo resto que puede ser uno o cero.
220 0
110 0
55 1
Centro de e
e-Learning SCEU UTN - BA.
Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e
www.sceu.frba.utn.edu.ar/e-learning
p. 16
13 1
6 0
3 1
1 1
Nota:: En internet podremos encontrar varios programas que convierten valores binarios a
decimales, o decimales a binarios.
Veremos ahora como basado en la numeración binaria transformaremos estos para hacer
una conversión hexadecimal. Partamos de la siguiente tabla en donde tenemos una
equivalencia entre los números hexadecimales básicos y sus correspondientes números.
binario hexadecimal
0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 8
1001 9
1010 A
1011 B
1100 C
1101 D
1110 E
1111 F
Centro de e
e-Learning SCEU UTN - BA.
Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e
www.sceu.frba.utn.edu.ar/e-learning
p. 17
Durante un tiempo, las personas solo escribieron programas que no mostraban acentos.
En la década de 1980, casi todas las computadoras personales eran de 8 bits, lo que
significa que los bytes podían contener valores que oscilaban entre 0 y 255. Los códigos
ASCII solo subían a 127, por lo que algunas máquinas asignaban valores entre 128 y 255
a caracteres acentuados. Sin embargo, diferentes máquinas tenían códigos diferentes, lo
que llevó a problemas para intercambiar archivos. Finalmente, surgieron varios conjuntos
de valores de uso común para el rango de 128
128–255.
255. Algunos eran estándares verdaderos,
verdade
definidos por la Organización Internacional para la Estandarización, y otros eran
convenciones de facto que fueron inventadas por una compañía u otra y lograron ponerse
al día.
255 caracteres no son muchos. Por ejemplo, no se puede ajustar los caracteres caracte
acentuados utilizados en Europa occidental y el alfabeto cirílico utilizado para el ruso en el
rango de 128–255
255 porque hay más de 128 caracteres de este tipo.
Puede escribir archivos usando diferentes códigos (todos sus archivos rusos en un
sistema de codificación llamado KOI8, todos sus archivos franceses en un sistema de
codificación diferente llamado Latin1), pero ¿qué sucede si desea escribir un documento
francés que cita algún texto en ruso? En la década de 1980, la gente comenzó a querer
resolver este problema y comenzó el esfuerzo de estandarización de Unicode.
Centro de e
e-Learning SCEU UTN - BA.
Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e
www.sceu.frba.utn.edu.ar/e-learning
p. 18
Unicode utiliza una gama más amplia de códigos, de 0 a 1.114.111 (0x10FFFF en la base
16).
Existe una norma ISO relacionada, ISO 10646. Unicode e ISO 10646 fueron originalmente
esfuerzos separados, pero las especificaciones se fusionaron con la revisión 1.1 de
Unicode.
Definiciones
Un carácter es el componente más pequeño posible de un texto. "A", "B", "C", etc., son
caracteres diferentes. Así son ‘È’ y ‘Í’. Los caracteres son abstracciones y varían según el
idioma o el contexto del que estés hablando. Por ejemplo
ejemplo,, el símbolo para ohmios (Ω)
(
generalmente se dibuja de manera muy similar a la letra mayúscula omega ((Ω) en el
alfabeto griego (incluso pueden ser iguales en algunas fuentes), pero estos son dos
caracteres diferentes que tienen significados diferentes.
Codificaciones
Las reglas para convertir una cadena Unicode en una secuencia de bytes se denomina
denominan
codificación. UTF-8
8 es probablemente la codificación más comúnmente soportada.
Centro de e
e-Learning SCEU UTN - BA.
Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e
www.sceu.frba.utn.edu.ar/e-learning
p. 19
4.- String
Los strings pueden considerarse como una serie de caracteres, la forma en la cual estos
caracteres son almacenados puede variar dependiendo del tipo de juego de caracteres
que estemos considerando. Cuando por ejemplo el texto es almacenado en archivos, el
conjunto de caracteres determina su formato, estos conjuntos de caracteres son
estándares que asignan códigos enteros a caracteres individuales para que puedan
representarse en la memoria de la computadora.
Nota:: Los caracteres de la tabla ascii son considerados como un caso reducido de
Unicode.
ascii.py
1 print(ord('a'))
2 print(chr(97))
3 print(hex(97))
Retorna:
97
a
0x61
Algunos
lgunos alfabetos definen tantos caracteres que es imposible representar cada uno de
ellos como un byte. Unicode permite más flexibilidad. El texto Unicode a veces se
denomina cadenas de "caracteres amplias", ", porque los caracteres se pueden representar
represen
con varios bytes si es necesario. Unicode se usa normalmente en programas
internacionalizados, para representar conjuntos de caracteres europeos, asiáticos y otros
que no están en inglés y que tienen más caracteres de los que pueden representar los
bytes
es de 8 bits. Los códigos de caracteres menores de 128 se representan como un solo
byte; los códigos entre 128 y 0x7ff (2047) se convierten en 2 bytes, donde cada byte tiene
Centro de e
e-Learning SCEU UTN - BA.
Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e
www.sceu.frba.utn.edu.ar/e-learning
p. 20
un valor entre 128 y 255; y los códigos superiores a 0x7ff se convierten en secuen
secuencias de
3 o 4 bytes con valores entre 128 y 255.
Desde Python 3.0, el lenguaje presenta un tipo “str” que contiene caracteres Unicode, lo
que significa que cualquier cadena creada con comillas simples, dobles o triples se
almacena como Unicode. La codific
codificación
ación por defecto de Python es UTF-8,
UTF por lo que
simplemente se puede incluir un carácter Unicode en un literal de cadena. Para cambiar el
tipo de codificación se debe incluir en la primera o segunda línea del programa el
siguiente código:
unicode.py
1 canciónn = "Mi canción preferida"
2 print(canción)
formatos.py
1 mi_string = "as"
2
3 print(mi_string.encode('ascii'))
mi_string.encode('ascii'))
4 print(mi_string.encode('latin1'))
5 print(mi_string.encode('utf8'))
6 print(mi_string.encode('utf16'))
7 print(mi_string.encode('utf32'))
8
9 var = b'\xff\xfe\x00\x00a\x00
x00\x00\x00s\x00\x00\x00'
Centro de e
e-Learning SCEU UTN - BA.
Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e
www.sceu.frba.utn.edu.ar/e-learning
p. 21
10 print(var.decode('utf32'))
11
12 print("\N{GREEK CAPITAL LETTER DELTA}")
13 print("\u0394")
14 print("\U00000394")
Retorna:
b'as'
b'as'
b'as'
b'\xff\xfea\x00s\x00'
b'\xff\xfe\x00\x00a\x00\x00\x00s
x00s\x00\x00\x00'
Δ
Δ
Δ
Nota:: La b inicial representa cadena de byte. Es posible utilizar también una B mayúscula.
Al igual que con los literales de cadena, los literales de bytes también pueden usar un
prefijo r para deshabilitar el procesamiento de sec
secuencias
uencias de escape.
Centro de e
e-Learning SCEU UTN - BA.
Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e
www.sceu.frba.utn.edu.ar/e-learning
p. 22
Nota: Algunas codificaciones utilizan secuencias de bytes incluso más grandes para
representar caracteres. Cuando sea necesario, puede especificar valores de punto de
código Unicode de 16 y 32 bits para los caracteres en sus cadenas; co como se mostró
anteriormente, podemos usar ""\ u ..." con cuatro dígitos hexadecimales para el primero, y
"\ U. .. "con ocho dígitos hexadecimales para el último, y puede mezclarlos en literales con
caracteres ASCII más simples libremente
libremente.
Python 3.X viene con tres tipos de objetos para representar cadenas de caracteres
(strings):: uno para datos textuales y dos para datos binarios:
Los objetos de cadena de Python 3.X se originan cuando se llama a una función
incorporada como str o bytes.
Todas las formas literales de cadenas (sea utilizando comillas simples, dobles o triples)
generan un texto Unicode, pero si le agr agregamos una b o B delante, generamos un objeto
de bytes de 8 bits. Si utilizamos la función type() podemos ver que el primer objeto es del
tipo ‘bytes’ y el segundo del tipo ‘str’ en el caso de que queramos pasar
string_literal.py
1 Fruta1 = b'Manzana'
2 Fruta2 = 'Pera'
3 print(type(Fruta1))
4 print(type(Fruta2))
5 print(Fruta1.decode('ascii'))
6 print(type(Fruta1.decode('ascii')))
7 print(Fruta2.encode('ascii'))
8 print(type(Fruta2.encode('ascii')))
Centro de e
e-Learning SCEU UTN - BA.
Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e
www.sceu.frba.utn.edu.ar/e-learning
p. 23
Retorna:
<class 'bytes'>
<class 'str'>
Manzana
<class 'str'>
b'Pera'
<class 'bytes'>
Nota:: Como ya hemos visto antes hemos utilizado encode() y decode() para pasar de un
tipo al otro.
Primero: En el caso de trabajar con código de byte, cada uno de sus elementos son
tratados como el correspondiente número en la tabla ASCII, es decir que si intentamos
obtener el primer elemento de “Fruta1” nos retornará el número correspondiente a la letra
“M” el cual es el 77.
string_literal2.py
1 fruta1 = b'Manzana'
2 fruta2 = 'Pera'
3 print(fruta1[0])
4 print(fruta2[0])
Retorna:
77
P
Centro de e
e-Learning SCEU UTN - BA.
Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e
www.sceu.frba.utn.edu.ar/e-learning
p. 24
argumentos_error.py
1 try:
2 print(b'\x80abc'.decode("utf
abc'.decode("utf-8", "strict"))
3 except UnicodeDecodeError:
4 print("Ha existido un error en la decodificación")
5
6 print(b'\x80abc'.decode("utf
x80abc'.decode("utf-8", "replace"))
7 print(b'\x80abc'.decode("utf
x80abc'.decode("utf-8", "backslashreplace"))
8 print(b'\x80abc'.decode("utf
x80abc'.decode("utf-8", "ignore"))
Retorna:
Centro de e
e-Learning SCEU UTN - BA.
Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e
www.sceu.frba.utn.edu.ar/e-learning
p. 25
El parámetro de errores es el mismo que el del método decode () pero admite algunos
controladores más aparte de strict, replace, e ignore:
Por ejemplo el chr(40960) retorna el carácter “Yi Syllable It” que no puede ser
representado en código ascii por lo que al intentar pasar el símbolo a ascii nos retornará
un error.
http://www.codetable.net/decimal/40960
argumentos_error2.py
1 u = chr(40960) + 'abcd'
2 print(u)
3 print(u.encode('utf-8'))
4 try:
5 print(u.encode('ascii'))
6 except UnicodeEncodeError:
7 print('Se ha dado un error en la codificación')
8
9 print(u.encode('ascii', 'ignore'))
10 print(u.encode('ascii', 'replace'))
11 print(u.encode('ascii', 'xmlcha
'xmlcharrefreplace'))
Centro de e
e-Learning SCEU UTN - BA.
Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e
www.sceu.frba.utn.edu.ar/e-learning
p. 26
12 print(u.encode('ascii', 'backslashreplace'))
13 print(u.encode('ascii', 'namereplace'))
Retorna:
ꀀ abcd
b'\xea\x80\x80abcd'
Se ha dado un error en la codificación
b'abcd'
b'?abcd'
b'ꀀabcd'
b'\\ua000abcd'
b'\\N{YI SYLLABLE IT}abcd'
Nota: Las rutinas de bajo nivel para registrar y acceder a las codificaciones disponibles se
encuentran en el módulo “codecs
codecs”.. La implementación de nuevas codificaciones también
requiere la comprensión del módulo de codecs.
Centro de e
e-Learning SCEU UTN - BA.
Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e
www.sceu.frba.utn.edu.ar/e-learning
p. 27
argumentos_error2.py
1 mistr = 'Pera'
2 mistr2 = 'Coco'
3 print('%s y %s' %(mistr, mistr2))
4 print('{0} y {1}'.format(mistr, mistr2))
5
6 mibyte = b'Manzana'
7 mibyte2 = b'Papas'
8 print(type(mibyte))
9 print('%s y %s' %(mibyte,
mibyte, mibyte2))
10 print('{0} y {1}'.format(mibyte, mibyte2))
11 print(type(mibyte))
12 a = '%s y %s' %(mibyte, mibyte2)
13 print(a)
14 print(type(a))
Retorna:
Pera y Coco
Pera y Coco
<class 'bytes'>
b'Manzana' y b'Papas'
b'Manzana' y b'Papas'
<class 'bytes'>
b'Manzana' y b'Papas'
<class 'str'>
Centro de e
e-Learning SCEU UTN - BA.
Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e
www.sceu.frba.utn.edu.ar/e-learning
p. 28
Reemplazar elementos
En el caso de reemplazar elementos de un objeto de tipo bytes, debemos anteponer la
letra b o B,
reemplazar_en_objetos_byte yte.py
1 mibyte = b'Manzana'
2 print(mibyte.replace(b'an' ,b'un'))
Retorna:
b'Munzuna'
concatenar.py
1 mistr = 'Pera'
2 mibyte2 = B'Manzana'
3 try:
4 print(mibyte2 + mistr)
5 except:
6 print('No puedo concatenar un objeto de tipo str con uno de tipo bytes')
Retorna:
Centro de e
e-Learning SCEU UTN - BA.
Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e
www.sceu.frba.utn.edu.ar/e-learning
p. 29
8.- bytearray
Trabajar con objetos del tipo bytearray es similar a trabajar con objetos del tipo bytes, con
la diferencia de que los objetos bytearray son mutables y necesitan que especifiquemos el
tipo de codificación que estamos utilizando. En el siguiente te ejemplo utilizamos
uti la
codificación
cación “latin1” y sustituimos “é” por “á”. Debemos conocer el valor numérico según la
codificación para realizar la sustitución.
bytearray.py
1 mi_string = "Compré una Manzana"
2 mi_bytearray = bytearray(mi_string, 'latin1')
3 print(mi_bytearray)
4 print(mi_bytearray[5])
5 mi_bytearray[5] = 225
6 print(mi_bytearray)
7 print(mi_bytearray.decode('latin1'))
Retorna:
bytearray(b'Compr\xe9
xe9 una Manzana')
233
bytearray(b'Compr\xe1
xe1 una Manzana')
Comprá una Manzana
Centro de e
e-Learning SCEU UTN - BA.
Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e
www.sceu.frba.utn.edu.ar/e-learning
p. 30
El modo de texto implica objetos de cadena y el modo binario implica objetos de bytes:
Los
os archivos de texto devuelven una cadena para las llecturas
ecturas y esperan una para
las escrituras, pero los archivos binarios devuelven bytes para las lecturas y
esperar uno (o un bytearray) para las escrituras.
Centro de e
e-Learning SCEU UTN - BA.
Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e
www.sceu.frba.utn.edu.ar/e-learning
p. 31
archivo1.py
1 import os
2 archivo1 = os.path.dirname(os.path.abspath(__file__))+"
os.path.dirname(os.path.abspath(__file__))+"\\archivo1.txt"
archivo1.txt"
3
4 open(archivo1, 'w').write('Escribo algo de texto
texto\n')
5 print(open(archivo1, 'r').read
'r').read())
6 print(open(archivo1, 'rb').read())
7
8 print('----------------------------
----------------------------')
9 archivo2 = os.path.dirname(os.path.abspath(__file__))+"
os.path.dirname(os.path.abspath(__file__))+"\\archivo2.txt"
archivo2.txt"
10
11 open(archivo2, 'wb').write(b'Escribo algo de texto
texto\n')
12 print(open(archivo2,
(archivo2, 'r').read())
13 print(open(archivo2, 'rb').read())
Retorna:
open('archivo3',
', 'w', encoding='latin
encoding='latin-1’).write(‘texto a grabar’)
Centro de e
e-Learning SCEU UTN - BA.
Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e
www.sceu.frba.utn.edu.ar/e-learning
p. 32
Manual online
https://docs.python.org/3.7/tutorial/
https://docs.python.org/3.7/library/index.html
https://docs.python.org/3/howto/unicode.html
https://peewee.readthedocs.io/en/2.0.2/peewee/overview.html
Centro de e
e-Learning SCEU UTN - BA.
Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e
www.sceu.frba.utn.edu.ar/e-learning
p. 33
Lo que vimos
En esta unidad hemos trabajado con el ORM “Peewee”, con objetos de texto y de bytes
bytes.
Lo que viene:
En la siguiente unidad comenzaremos a trabajar sobre la sobrecarga de operadores.
Centro de e
e-Learning SCEU UTN - BA.
Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e
www.sceu.frba.utn.edu.ar/e-learning