IWI131 Programación


Procesamiento de Texto



Departamento de Informática
Universidad Técnica Federico Santa María

El procesamiento de texto consiste en manipular strings para:

  1. extraer información
  2. convertir un texto en otro
  3. codificar información
  • Servirá más adelante para crear o editar archivos.

Hasta ahora sabemos:

In [1]:
s = "hola"
t = "mundo"
In [2]:
s+t
Out[2]:
'holamundo'
In [3]:
s*2
Out[3]:
'holahola'
In [4]:
s[3]
Out[4]:
'a'
In [5]:
s in t
Out[5]:
False
In [6]:
list("abc")
Out[6]:
['a', 'b', 'c']

Secuencias de escape

Utilizando el caracter backslash (\) se pueden llamar a secuencias de escape que normalmente serían interpretadas como strings.

Salto de línea

  • Corresponde al caracter backslash seguido de una n: '\n'.
  • Es invisible al utilizar print.
In [7]:
a = "piano\nviolin\noboe"
In [8]:
print(a)
piano
violin
oboe

No obstante, la secuencia de escape es parte del string.

In [9]:
a
Out[9]:
'piano\nviolin\noboe'

Tabulación

  • Se utiliza con backslash más el caracter t: \t
  • Es equivalente a hacer una tabulación.
In [10]:
a = "piano\tviolin\toboe"
print(a)
piano	violin	oboe
In [11]:
a
Out[11]:
'piano\tviolin\toboe'
  • La longitud de un salto de línea y una tabulación es 1.
  • Por lo general, el caracter backslash es ignorado para efectos de cualquier string porque permite hacer las secuencias de escape.
In [12]:
len("\n")
Out[12]:
1
In [13]:
len("\t")
Out[13]:
1
In [14]:
len("piano\nviolin\noboe")
Out[14]:
17

Removiendo carácteres especiales

El método s.strip() remueve espacios y caracteres especiales que aparezcan antes y después de algún texto.

In [15]:
s = "hola mundo\n"
print(s)
hola mundo

In [16]:
print(s.strip())
hola mundo
In [17]:
s
Out[17]:
'hola mundo\n'
In [18]:
s.strip()
Out[18]:
'hola mundo'

Importante: El método strip no remueve espacios, ni caracteres especiales que estén en medio de las palabras.

In [19]:
"hola\nmundo\n".strip()
Out[19]:
'hola\nmundo'

Reemplazar secciones de un string

El método s.replace(antes,despues) que reemplaza totas las apariciones del texto antes por el texto despues en s.

In [20]:
orden = "Quiero arroz con pollo"
orden.replace("arroz","pure")
Out[20]:
'Quiero pure con pollo'
In [21]:
print(orden.replace("arroz","pure"))
Quiero pure con pollo
In [22]:
orden = orden.replace("arroz","pure")
print(orden)
Quiero pure con pollo

El valor del string NO cambia

In [23]:
a = "11111111-5"
In [24]:
# reemplazar el caracter '1' por '2' en la variable a (que es un string)
a.replace("1","2")
Out[24]:
'22222222-5'
In [25]:
# reemplazar el caracter '1' por '2' en la variable a (que es un string)
# solo se reemplaza 2 veces
a.replace("1","2",2)
Out[25]:
'22111111-5'

Separar strings

  • El método s.split() separa un string en varios substrings usando el espacio en blanco como separador.
  • El método s.split(sep) separa un string en varios substrings usando el texto sep como separador.
In [26]:
s = "Ana lavaba las sabanas"
In [27]:
s.split()
Out[27]:
['Ana', 'lavaba', 'las', 'sabanas']
In [28]:
s.split("aba")
Out[28]:
['Ana lav', ' las s', 'nas']
In [29]:
print(s)
Ana lavaba las sabanas

¿Qué tipo de dato entrega el método split?

Unir strings

El método s.join(iterable) une los strings de la variable iterable utilizando a s como pegamento.

In [30]:
valores = ['0', '1', '2', '3', '4', '5']
pegamento = " "
pegamento.join(valores)
Out[30]:
'0 1 2 3 4 5'
In [31]:
",".join(valores)
Out[31]:
'0,1,2,3,4,5'
In [32]:
valores
Out[32]:
['0', '1', '2', '3', '4', '5']
In [33]:
"".join(valores)
Out[33]:
'012345'
In [34]:
" ".join([1,2,4])
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-34-ca6a78bae41f> in <module>()
----> 1 " ".join([1,2,4])

TypeError: sequence item 0: expected str instance, int found
In [35]:
" ".join(("1","2","4"))
Out[35]:
'1 2 4'
In [36]:
" ".join("1245")
Out[36]:
'1 2 4 5'

Interpolación de strings

La interpolación de strings permite generar una plantilla que puede ser rellenada con información dinámica.

In [37]:
s =  "Soy {0} y vivo en {1}"
In [38]:
s.format("Perico","Valparaiso")
Out[38]:
'Soy Perico y vivo en Valparaiso'
In [39]:
s.format("Erika","Berlin")
Out[39]:
'Soy Erika y vivo en Berlin'
In [40]:
s.format("Wang Dawei","Beijing")
Out[40]:
'Soy Wang Dawei y vivo en Beijing'
In [41]:
print(s)
Soy {0} y vivo en {1}
  • {0} y {1} se llaman campos, y el método format va rellenando los campos en orden.
In [42]:
"{1}{0}{2}{0}".format("a","v","c")
Out[42]:
'vaca'
In [43]:
"{0} y {1}".format("carne","huevos")
Out[43]:
'carne y huevos'
In [44]:
"{1} y {0}".format("carne","huevos")
Out[44]:
'huevos y carne'
In [45]:
"{2}".format("a")
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-45-400c2c4803f0> in <module>()
----> 1 "{2}".format("a")

IndexError: tuple index out of range
In [46]:
"{0}, {1} {3}".format("casa", "azul", "grande", "verde")
Out[46]:
'casa, azul verde'
  • Los campos pueden definirse por identificadores, en lugar de números.
In [47]:
s = "{nombre} estudia en la {universidad}"
In [48]:
s.format(nombre="Perico", universidad="UTFSM")
Out[48]:
'Perico estudia en la UTFSM'
In [49]:
s.format(universidad="PUC",nombre="Yayita")
Out[49]:
'Yayita estudia en la PUC'

Algunas preguntas

  • ¿Qué es lo que podemos hacer con strings?
  • ¿Los métodos modifican al string?
In [ ]: