IWI-131 Programación¶
Procesamiento de Texto¶
Secuencias de escape¶
Utilizando el caracter backslash ('\'
) se pueden incluir caracteres que tienen interpretaciones especiales en un string, como un cambio de línea o un tabulador.
Salto de línea¶
- Corresponde al caracter backslash seguido de una n:
'\n'
. - Puede verse su efecto al utilizar
print
.
a = "piano\nviolin\noboe"
print(a)
piano violin oboe
La secuencia de escape es parte del string.
a
'piano\nviolin\noboe'
Tabulación¶
- Se utiliza con backslash más el caracter t:
'\t'
- Es equivalente a hacer una tabulación.
a = "piano\tviolin\toboe"
print(a)
piano violin oboe
a
'piano\tviolin\toboe'
- A pesar de que se ven como dos caracteres, las secuencias de escape ocupan una posición en el string.
- Como el caracter
'\'
se usa para las secuencias de escape, si queremos incluirlo en un string tenemos que usar la secuencia de escape:'\\'
.
len("\n")
1
len("\t")
1
len("piano\nviolin\noboe")
17
Removiendo carácteres especiales¶
El método s.strip()
crea y retorna un nuevo string a partir de un string original s
, removiendo espacios, cambios de línea, tabuladores y otros caracteres especiales que aparezcan al inicio y final de s
.
El valor del string original s
, NO cambia.
s = "hola mundo\n"
print(s)
hola mundo
print(s.strip())
hola mundo
s
'hola mundo\n'
s.strip()
'hola mundo'
s = '\n\t hola \t\n '
s.strip()
'hola'
Importante: El método strip
no remueve espacios, ni caracteres especiales que estén en medio de las palabras.
"hola\nmundo\n".strip()
'hola\nmundo'
Reemplazar secciones de un string¶
El método s.replace(antes,despues)
crea y retorna un nuevo string a partir de un string original s
, reemplazando TODAS las apariciones del string antes
con el string despues
.
El valor del string original s
, NO cambia.
orden = "Quiero arroz con pollo"
orden.replace("arroz","pure")
'Quiero pure con pollo'
print(orden.replace("arroz","pure"))
Quiero pure con pollo
orden = orden.replace("arroz","pure")
print(orden)
Quiero pure con pollo
a = "11111111-5"
# reemplazar el caracter '1' por '2' en la variable a (que es un string)
a.replace("1","2")
'22222222-5'
# reemplazar el caracter '1' por '2' en la variable a (que es un string)
# solo se reemplaza 2 veces
a.replace("1","2",2)
'22111111-5'
Separar strings¶
El método s.split(sep)
separa el string s
en varios substrings usando el string sep
como separador, retornando una lista con los substrings resultantes. Si se omite el separador, se utiliza el espacio en blanco para separar el string s
.
El valor del string original s
, NO cambia.
s = "Ana lavaba las sabanas"
s.split()
['Ana', 'lavaba', 'las', 'sabanas']
s.split("aba")
['Ana lav', ' las s', 'nas']
print(s)
Ana lavaba las sabanas
Unir strings¶
El método s.join(lista)
une los strings contenidos en lista
, separándolos con el string s
, retornando el string resultante.
Ni la lista original ni el string s
cambian.
valores = ['0', '1', '2', '3', '4', '5']
pegamento = " "
pegamento.join(valores)
'0 1 2 3 4 5'
",".join(valores)
'0,1,2,3,4,5'
valores
['0', '1', '2', '3', '4', '5']
El separador puede ser un string nulo.
"".join(valores)
'012345'
La lista debe contener strings.
" ".join([1,2,4])
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-29-e62e3e9972c6> in <module> ----> 1 " ".join([1,2,4]) TypeError: sequence item 0: expected str instance, int found
" ".join(["1","2","4"])
'1 2 4'
Interpolación de strings¶
La interpolación de strings permite construir strings con formato, a partir de una plantilla que se rellena en forma dinámica.
s = "Soy {0} y vivo en {1}"
s.format("Perico","Valparaiso")
'Soy Perico y vivo en Valparaiso'
s.format("Erika","Berlin")
'Soy Erika y vivo en Berlin'
s.format("Wang Dawei","Beijing")
'Soy Wang Dawei y vivo en Beijing'
print(s)
Soy {0} y vivo en {1}
{0}
y{1}
se llaman campos, y el métodoformat
los rellena con sus argumentos en orden. El primer argumento sustituye el campo{0}
, el segundo el campo{1}
, y así sucesivamente.
"{1}{0}{2}{0}".format("a","v","c")
'vaca'
"{0} y {1}".format("carne","huevos")
'carne y huevos'
"{1} y {0}".format("carne","huevos")
'huevos y carne'
- Si los campos aparecen una única vez en la plantilla, puede omitirse los números. En este caso los campos se rellenan en orden de aparición. El primero será {0}, el segundo {1}, y así sucesivamente.
s = "Soy {} y vivo en {}"
s.format("Perico","Valparaiso")
'Soy Perico y vivo en Valparaiso'
El método format
debe tener suficientes argumentos para poder rellenar la plantilla, aunque no se usen todos.
Si en la plantilla se usa un campo para el que format
no tiene argumento, se produce un error.
"{2}".format("a")
--------------------------------------------------------------------------- IndexError Traceback (most recent call last) <ipython-input-41-399117c94061> in <module> ----> 1 "{2}".format("a") IndexError: Replacement index 2 out of range for positional args tuple
"{0}, {1} {3}".format("casa", "azul", "grande", "verde")
'casa, azul verde'
Archivos de Texto¶
Los archivos de texto están compuestos únicamente por caracteres legibles por los humanos (como letras, dígitos y caracteres de puntuación), pero sin ningún tipo de formato tipográfico. Es básicamente lo mismo que almacenamos en variables de tipo string, pero que se guardan en un medio persistente, como el disco del computador o una unidad de memoria externa (pendrive, tarjeta de memoria, etc.).
Al igual que todos los archivos, los archivos de texto tienen un nombre en el dispositivo donde se almacenan.
Ejemplo de archivo: quijote.txt
En un lugar de La Mancha
de cuyo nombre no quiero acordarme
no ha mucho tiempo que vivia un hidalgo
Protocolo de uso para lectura¶
- Abrir el archivo.
- Recorrer el archivo.
- Cerrar el archivo.
Apertura de Archivo¶
Un archivo puede ser abierto mediante la función open
, que acepta como parámetros el nombre que tiene el archivo en el disco y el modo de apertura.
Los modos de apertura son:
- Lectura:
'r'
. - Escritura:
'w'
. - Agregar al final del archivo:
'a'
.
# Por omisión los archivos se abren en modo 'r'
archivo = open('quijote.txt')
Recorrer el archivo¶
Las líneas de un archivo previamente abierto pueden recorrerse utilizando un ciclo for
.
El final de cada línea incluye el caracter de nueva línea: '\n'
, que es leído en el for. Si no queremos utilizarlo, es posible "limpiar" cada línea leída antes de procesarla utilizando el método strip()
estudiado previamente.
for linea in archivo:
# Operaciones sobre linea
linea = linea.strip()
print(linea)
En un lugar de La Mancha de cuyo nombre no quiero acordarme no ha mucho tiempo que vivia un hidalgo
Cierre de archivo¶
El último paso es cerrar el archivo luego de leer la información. Para ello se utiliza el método close()
.
archivo.close()
Creación de archivos¶
Apertura¶
Para escribir un archivo es necesario abrirlo en modo de escritura, usando la función open
con el parámetro 'w'
.
nuevo_archivo = open('prueba.txt', 'w')
Escritura¶
Para escribir se debe utilizar el método write
, que recibe como parámetro un string con el texto que se escribirá en el archivo.
Para que el archivo contenga múltiples líneas, cada una de ellas debe terminar en el caracter de núeva línea: '\n'
.
nuevo_archivo.write('Informacion\n')
12
Cierre¶
Al igual que en el caso de lectura, luego de escribir la información se debe cerrar el archivo con close()
.
nuevo_archivo.close()
Agregar información a un archivo existente¶
Apertura¶
Para agregar datos al final de un archivo es necesario abrirlo en modo 'a'
usando la función open()
.
archivo = open('prueba.txt', 'a')
Escritura¶
Se utilizará el método write
, que recibe como parámetro un string con el texto que se agregará en el archivo.
archivo.write("Nueva informacion\n")
18
Cierre¶
Al igual que en el caso de lectura y escritura, luego de escribir la información se debe cerrar el archivo con close()
.
archivo.close()
Archivos con separador¶
Considere un archivo que utiliza un caracter para separar la información. Por ejemplo:
Esteban:Gutierrez:49:18:32
Luisa:Miranda:68:44:99
Jean Paul:Munoz:48:38:81
Gianfranco:Basso:54:54:50
Romina:Smith:100:98:9
Manipulación de este tipo de archivos¶
archivo = open('alumnos.txt')
for linea in archivo:
valores = linea.strip().split(':')
nombres = valores[0:2]
notas = []
for nota in valores[2:5]:
notas.append(int(nota))
print(nombres[0], notas)
archivo.close()
Esteban [49, 18, 32] Luisa [68, 44, 99] Jean Paul [48, 38, 81] Gianfranco [54, 54, 50] Romina [100, 98, 92]
Ejercicios¶
Ejercicio 1¶
Escriba un programa que abra el archivo quijote.txt
y cuente:
- el número de letras,
- el número de palabras,
- el número de líneas.
Ejercicio 2¶
A partir del archivo alumnos.txt
, crear los siguientes archivos:
aprobados.txt.
Luisa,Miranda,70
Jean Paul,Munoz,56
Romina,Smith,97
reprobados.txt
Esteban,Gutierrez,33
Gianfranco,Basso,53