Python: Cadenas

Podemos definir las cadenas con comillas, simples o dobles, pero si empezamos con simples debemos acabar con simples aunque podemos mezclar:

In [1]: cadena1 = 'con comillas simples'

In [2]: cadena2 = "con comillas simples"

In [3]: cadena3 = "mezclando comillas 'juan' sin que afecte"

In [4]: cadena4 = 'mezclando al revés "Pedro" igualmente'

In [5]: print(cadena1)
con comillas simples

In [6]: print(cadena2)
con comillas simples

In [7]: print(cadena3)
mezclando comillas 'juan' sinque afecte

In [8]: print(cadena4)
mezclando al revés "Pedro" igualmente

También podemos definir cadenas multilínea usando TRIPLE comillas simple o doble:

In [1]: cadena1 = '''cadena con varias
   ...: líneas de texto
   ...: sin problemas'''

In [2]: cadena2 = """y de igual manera
   ...: con dobles comillas
   ...: perfectamente"""

In [3]: print(cadena1)
cadena con varias
líneas de texto
sin problemas

In [4]: print(cadena2)
y de igual manera
con dobles comillas
perfectamente

Podemos ver como representa Python este tipo de cadenas múltiples, que además puede ser muy útil:

In [1]: cadena1 = '''cadena con varias
   ...: líneas de texto
   ...: sin problemas'''

In [2]: print(repr(cadena1))
'cadena con varias\nlíneas de texto\nsin problemas'

Cómo ver el tipo:

In [1]: cadena = "192.168.1.1"

In [2]: type(cadena)
Out[2]: str

Las cadenas funcionan como un array, empezando por cero (de izquierda a derecha) y por -1 (de derecha a izquierda):

In [1]: cadena = "192.168.1.1"
                  01234567890
                  10987654321 (en negativo)
In [2]: cadena[2]
Out[2]: '2'

In [3]: cadena[-5]
Out[3]: '8'

Como cualquier cadena puede contener caracteres especiales como /n que representa nueva línea, pero si queremos que la cadena muestre /n siempre podemos escapar los caracteres especiales \/n o podemos indicar que ignore los caracteres especiales anteponiendo una r antes de la primera comilla, veamos unos ejemplos:

In [1]: cadena = "esto es un PATH de Windows c:\windows\nuevo\trabajo\fichero1"

In [2]: cadena
Out[2]: 'esto es un PATH de Windows c:\\windows\nuevo\trabajo\fichero1'

In [3]: print(cadena)
esto es un PATH de Windows c:\windows
uevo	rabajo
              ichero1

In [4]: cadena = r"esto es un PATH de Windows c:\windows\nuevo\trabajo\fichero1"

In [5]: cadena
Out[5]: 'esto es un PATH de Windows c:\\windows\\nuevo\\trabajo\\fichero1'

In [6]: print(cadena)
esto es un PATH de Windows c:\windows\nuevo\trabajo\fichero1

Para suprimir todos los caracteres de espacio, tabuladores, saltos de líneas, etc, del principio y final de una cadena, podemos usar los métodos .strip, .lstrip y .rstrip, con ejemplos se ve mejor:

In [1]: cadena = "     texto de ejemplo, con espacios\t tabulación y saltos de línea\n\t\n"

In [2]: cadena.strip()
Out[2]: 'texto de ejemplo, con espacios\t tabulación y saltos de línea'

In [3]: cadena.lstrip()
Out[3]: 'texto de ejemplo, con espacios\t tabulación y saltos de línea\n\t\n'

In [4]: cadena.rstrip()
Out[4]: '     texto de ejemplo, con espacios\t tabulación y saltos de línea'

In [5]: print(cadena.strip())
texto de ejemplo, con espacios 	 tabulación y
 saltos de línea

Para dividir cadenas según un patron podemos usar .split, por defecto usa espacios en blanco como separador y el separador pude ser más de un carácter. Siempre se devuelve una lista con las divisiones que haya realizado aunque solo sea una (es decir la misma cadena). Com,o segundo parámetro podemos indicar el número máximo de divisiones que debe hacer (número de veces que cuenta el separador).

In [1]: cadena = "192.168.1.3"

In [2]: cadena.split()
Out[2]: ['192.168.1.3']

In [3]: cadena.split('.')
Out[3]: ['192', '168', '1', '3']

In [4]: cadena.split('.', 2)
Out[4]: ['192', '168', '1.3']

In [5]: cadena.split('.1')
Out[5]: ['192', '68', '.3']

In [6]: cadena.split('192')
Out[6]: ['', '.168.1.3']

Si lo que queremos es dividir líneas (por saltos de línea \n) podemos usar .splitlines

In [1]: cadena = """esto es una cadena
   ...: de varias líneas
   ...: y queremos solo
   ...: dividir líneas"""

In [2]: cadena.split()
Out[2]:
['esto',
 'es',
 'una',
 'cadena',
 'de',
 'varias',
 'líneas',
 'y',
 'queremos',
 'solo',
 'dividir',
 'líneas']

In [3]: cadena.splitlines()
Out[3]: ['esto es una cadena', 'de varias líneas', 'y queremos solo', 'dividir líneas']

In [4]: cadena.split("\n")
Out[4]: ['esto es una cadena', 'de varias líneas', 'y queremos solo', 'dividir líneas']

Su formato es: separador.join(elementos), el separador es una cadena (str) y puede ser de 1 o más caracteres y elementos por lo general será una lista a unir con el separador. El valor de vuelto es una cadena (str).

In [1]: ip = '192.168.1.2'

In [2]: elementos = ip.split('.')

In [3]: elementos
Out[3]: ['192', '168', '1', '2']

In [4]: ip1 = '.'.join(elementos)

In [5]: ip1
Out[5]: '192.168.1.2'

In [6]: ip2 = '.:.'.join(elementos)

In [7]: ip2
Out[7]: '192.:.168.:.1.:.2'

Más información en: cadenas y métodos de cadenas

Retro

Lugares

Redes

Sistemas

Varios