En esta ocasión, cubrimos brevemente los tipos de datos específicos de Python diseñados para manejar datos de texto. Los principales tipos de datos que se utilizan para manejar datos de texto en Python son las cadenas o strings. Pueden ser cadenas normales, bytes que almacenan información binaria o Unicode. De forma predeterminada, todas las cadenas son Unicode en Python 3.x pero no lo son en Python 2.x. Esto es algo que definitivamente debes tener en cuenta cuando trabajes con texto en diferentes distribuciones de Python.
Las cadenas son una secuencia de caracteres en Python, similar a las matrices y el código con un conjunto de atributos y métodos que se pueden aprovechar para manipular y operar con datos de texto fácilmente. Esto hace que Python sea el idioma preferido para el análisis de texto en muchos escenarios.
String Literals
Hay varios tipos de cadenas, como se mencionó anteriormente. El siguiente BNF (Backus-Naur Form) nos da las definiciones léxicas generales para producir cadenas, como se ve en los documentos oficiales de Python.
1 2 3 4 5 6 7 8 9 10 | stringliteral ::= [stringprefix](shortstring | longstring) stringprefix ::= "r" | "u" | "ur" | "R" | "U" | "UR" | "Ur" | "uR" | "b" | "B" | "br" | "Br" | "bR" | "BR" shortstring ::= "'" shortstringitem* "'" | '"' shortstringitem* '"' longstring ::= "'''" longstringitem* "'''" | '"""' longstringitem* '"""' shortstringitem ::= shortstringchar | escapeseq longstringitem ::= longstringchar | escapeseq shortstringchar ::= <any source character except "\"> longstringchar ::= <any source character > escapeseq ::= "\" |
Existen diferentes tipos de prefijos de cadena y que pueden usarse con diferentes tipos de cadena para producir cadenas literales. En términos simples, los siguientes tipos de literales de cadena son los que más se utilizan:
- Short strings: estas cadenas suelen ir entre comillas simples (‘) o comillas dobles («) alrededor de los caracteres. Algunos ejemplos son» Hola «y» Hola «.
- Long strings: estas cadenas suelen ir entre comillas simples (»’) o dobles («»») alrededor de los caracteres. Algunos ejemplos son»»» Hola, soy una cadena larga «»»o »’ Hola Soy una cadena larga »’. Tenga en cuenta que (\’) indica una secuencia de escape de la que hablaremos pronto.
- Escape sequences in strings: estas cadenas a menudo tienen secuencias de escape incrustadas, donde la regla para las secuencias de escape comienza con una barra invertida (\) seguida de cualquier carácter ASCII. Por lo tanto, realizan interpolación de retroceso. Las secuencias de escape populares incluyen (\n), que indica un carácter de nueva línea y (\t), que indica una pestaña.
- Bytes: se utilizan para representar cadenas de bytes que crean objetos del tipo de datos del byte. Estas cadenas se pueden crear como bytes (‘…’) o usando la notación b ‘…’. Los ejemplos incluyen bytes(‘hola’) y b’hola ‘.
- Raw String: estas cadenas se crearon originalmente específicamente para expresiones regulares (regex) y patrones de regex. Estas cadenas se pueden crear usando la notación r’…’ y mantener la cadena en su forma original o sin procesar. Por lo tanto, no realizan ninguna interpolación de retroceso y desactivan las secuencias de escape. Un ejemplo es r’Hola ‘.
- Unicode: estas cadenas admiten caracteres Unicode en el texto y normalmente son secuencias de caracteres no ASCII. Estas cadenas se indican con la notación u’…’. Sin embargo, en Python 3.x, todos los literales de cadena se representan normalmente como Unicode. Además de la notación de cadena, hay varias formas específicas de representar caracteres Unicode especiales en la cadena. Lo habitual incluye la secuencia de escape del valor de bytes hexadecimales del formato ‘\xVV’. Además de esto, también tenemos secuencias de escape Unicode de la forma ‘\uVVVV’ y ‘\uVVVVVVVV’, donde la primera forma usa cuatro dígitos hexadecimales para codificar un carácter de 16 bits y la segunda usa ocho dígitos hexadecimales para codificar un 32- carácter de bits. Algunos ejemplos incluyen u’H\ xe8llo’ y u’H\u00e8llo’, que representa la cadena ‘Hèllo’.
Representación de Strings
Las cadenas son secuencias o colecciones de caracteres que se utilizan para almacenar y representar datos textuales. Las cadenas se pueden utilizar para almacenar texto y bytes como información. Un punto importante para recordar es que las cadenas son inmutables y cualquier operación realizada en cadenas crea un nuevo objeto de cadena (que se puede verificar usando la función id) en lugar de simplemente cambiar el valor del objeto de cadena existente. Veamos algunas representaciones de cadenas básicas.
1 2 3 4 | new_string = "This is a String" # storing a string print('ID:', id(new_string)) # shows the object identifier (address) print('Type:', type(new_string)) # shows the object type print('Value:', new_string) # shows the object value |
1 2 3 | ID: 1907471142032 Type: <class 'str'> Value: This is a String |
1 2 3 | # simple string simple_string = 'Hello!' + " I'm a simple string" print(simple_string) |
1 | Hello! I'm a simple string |
Representar cadenas de varias líneas también es bastante fácil y se puede hacer de la siguiente manera:
1 2 3 4 | # multi-line string, note the \n (newline) escape character automatically created multi_line_string = """Hello I'm a multi-line string!""" |
1 | multi_line_string |
1 | "Hello I'm\na multi-line\nstring!" |
1 | print(multi_line_string) |
1 2 3 | Hello I'm a multi-line string! |
Conclusión:
Las cadenas son objetos muy utilizados en el análisis de texto en Python, y es muy utilizado en programas de procesamiento del lenguaje natural, por lo cual es importante conocer las diferentes representaciones que se pueden tener con una cadena.
Este artículo se encuentra basado en el capítulo 02 del libro Text Analytics with Python.