¿Cómo extraigo partes específicas de un archivo de texto usando Python?

Extraer texto de un archivo es una tarea común en las secuencias de comandos y la programación, y Python lo facilita. En esta guía, analizaremos algunas formas sencillas de extraer texto de un archivo utilizando el lenguaje de programación Python 3.

En esta guía, usaremos Python versión 3. La mayoría de los sistemas vienen preinstalados con Python 2.7. Si bien Python 2.7 se usa en la mayoría de los códigos heredados, Python 3 es el presente y el futuro del lenguaje Python. A menos que tenga una razón específica para escribir o admitir el código Python heredado, le recomendamos que trabaje en Python 3.

Para Microsoft Windows, Python3 se puede descargar desde //www.python.org. Al instalar, asegúrese de que las opciones "Instalar el iniciador para todos los usuarios" y "Agregar Python a PATH" estén marcadas, como se muestra en la imagen a continuación.

En Linux, puede instalar Python 3 con su gestor de paquetes. Por ejemplo, en Debian o Ubuntu, puede instalarlo con el comando:

 sudo apt-get update && sudo apt-get install python3 

Para macOS, el instalador de Python 3 se puede descargar desde python.org, como se vinculó anteriormente. Si está utilizando el administrador de paquetes de Homebrew, también puede instalarlo abriendo una ventana de terminal ( AplicacionesUtilidades ) y ejecutando este comando:

 brew instalar python3 

Corriendo python

En Linux y macOS, el comando para ejecutar el intérprete de Python 3 es python3 . En Windows, si instaló el iniciador, el comando es py . Los comandos en esta página usan python3 ; si estás en Windows, sustituye py por python3 en todos los comandos.

Ejecutar Python sin opciones iniciará el intérprete interactivo. Para obtener más información sobre el uso del intérprete, consulte la descripción general de Python: uso del intérprete de Python. Si accidentalmente ingresa al intérprete, puede salir usando el comando exit () o quit () .

Ejecutar Python con un nombre de archivo interpretará ese programa de python. Por ejemplo:

 python3 program.py 

... ejecuta el programa contenido en el archivo program.py .

Bien, ¿cómo podemos usar Python para extraer texto de un archivo de texto?

Leyendo datos de un archivo de texto

Primero, leamos un archivo de texto. Digamos que estamos trabajando con un archivo llamado lorem.txt, que contiene algunas líneas del latín:

 Lorem ipsum dolor sit amet, consectetur adipiscing elit.Mauris nec maximus purus. Las mecenas se sientan amet pretium tellus. 

Quisque en dignissim lacus.

Nota: En todos los ejemplos que siguen, trabajamos con el texto contenido en este archivo. Siéntase libre de copiar y pegar el texto latino de arriba en un archivo de texto, y guárdelo como lorem.txt, para que pueda ejecutar el código de ejemplo usando este archivo como entrada.

Un programa Python puede leer un archivo de texto usando la función open () incorporada. Por ejemplo, a continuación se muestra un programa de Python 3 que abre lorem.txt para leer en modo de texto, lee el contenido en una cadena con el nombre contenido, cierra el archivo y luego imprime los datos.

 myfile = open ("lorem.txt", "rt") # open lorem.txt para leer el contenido del texto = myfile.read () # lea el archivo completo en una cadena myfile.close () # cierre el archivo imprimir (contenido) # imprimir contenidos 

Aquí, myfile es el nombre que le damos a nuestro objeto de archivo.

El parámetro " rt " en la función open () significa "estamos abriendo este archivo para leer los datos externos"

La marca de control (" # ") significa que todo en el resto de esa línea es un comentario y el intérprete de Python lo ignora.

Si guarda este programa en un archivo llamado read.py, puede ejecutarlo con el siguiente comando.

 python3 read.py 

El comando anterior genera el contenido de lorem.txt :

 Lorem ipsum dolor sit amet, consectetur adipiscing elit.Mauris nec maximus purus. Las mecenas se sientan amet pretium tellus. 

Quisque en dignissim lacus.

Usando "con abrir"

Es importante cerrar los archivos abiertos lo antes posible: abra el archivo, realice la operación y ciérrelo. No lo deje abierto por largos períodos de tiempo.

Cuando está trabajando con archivos, es una buena práctica usar el comando abierto ... como declaración compuesta. Es la forma más limpia de abrir un archivo, operarlo y cerrar el archivo, todo en un bloque de código fácil de leer. El archivo se cierra automáticamente cuando se completa el bloque de código.

Usando con open ... as, podemos reescribir nuestro programa para que se vea así:

 con abrir ('lorem.txt', 'rt') como myfile: # Abrir lorem.txt para leer el contenido del texto = myfile.read () # Leer el archivo completo en una cadena impresa (contenidos) # Imprimir la cadena 

Nota: La sangría es importante en Python. Los programas de Python utilizan espacios en blanco al principio de una línea para definir el alcance, como un bloque de código. Se recomienda que use cuatro espacios por nivel de sangría y que use espacios en lugar de pestañas. En los siguientes ejemplos, asegúrese de que su código esté sangrado exactamente como se presenta aquí.

Guarde el programa como read.py y ejecútelo:

 python3 read.py 

Salida

 Lorem ipsum dolor sit amet, consectetur adipiscing elit.Mauris nec maximus purus. Las mecenas se sientan amet pretium tellus. 

Quisque en dignissim lacus.

Leyendo archivos de texto línea por línea

En los ejemplos hasta ahora, hemos estado leyendo todo el archivo a la vez. Leer un archivo completo no es gran cosa con archivos pequeños, pero en general, no es una gran idea. Por un lado, si su archivo es más grande que la cantidad de memoria disponible, encontrará un error.

En casi todos los casos, es una mejor idea leer un archivo de texto una línea a la vez.

En Python, el objeto de archivo es un iterador. Un iterador es un tipo de objeto Python que se comporta de ciertas maneras cuando se opera repetidamente. Por ejemplo, puede usar un bucle for para operar en un objeto de archivo repetidamente, y cada vez que se realice la misma operación, recibirá un resultado diferente o "siguiente".

Para archivos de texto, el objeto de archivo itera una línea de texto a la vez. Considera que una línea de texto es una "unidad" de datos, por lo que podemos usar una instrucción for ... in loop para iterar en los datos una línea a la vez:

 con open ('lorem.txt', 'rt') como myfile: # Abra el archivo lorem.txt para leer el texto de myline en myfile: # Para cada línea, léalo en una cadena print (myline) # imprima esa cadena, repita 

Salida

 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris nec maximus purus. Las mecenas se sientan amet pretium tellus. Quisque en dignissim lacus. 

Observe que estamos recibiendo un salto de línea adicional ("nueva línea") después de cada línea. Eso es porque se están imprimiendo dos nuevas líneas. La primera es la nueva línea al final de cada línea de nuestro archivo de texto. La segunda nueva línea sucede porque, de manera predeterminada, print () agrega un salto de línea propio al final de lo que le haya pedido que imprima.

Almacenemos nuestras líneas de texto en una variable, específicamente una variable de lista, para poder verla más de cerca.

Almacenar datos de texto en una variable de lista

En Python, las listas son similares, pero no iguales, a una matriz en C o Java. Una lista de Python contiene datos indexados, de diferentes longitudes y tipos.

 mylines = [] # Declara una lista vacía llamada mylines. con open ('lorem.txt', 'rt') como myfile: # Abra lorem.txt para leer datos de texto. para myline en myfile: # Para cada línea, almacenada como myline, mylines.append (myline) # agrega su contenido a mylines. imprimir (mylines) # Imprimir la lista. 

La salida de este programa es un poco diferente. En lugar de imprimir el contenido de la lista, este programa imprime nuestro objeto de lista, que se ve así:

Salida

 ['Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc fringilla arcu congue metus aliquam mollis. \ N ', ' Mauris nec maximus purus. Las mecenas se sientan amet pretium tellus. Praesent sed rhoncus eo. Duis id commodo orci. \ N ', ' Quisque at dignissim lacus. \ N '] 

Aquí, vemos los contenidos en bruto de la lista. En su forma de objeto sin procesar, una lista se representa como una lista delimitada por comas. Aquí, cada elemento se representa como una cadena, y cada nueva línea se representa como su secuencia de caracteres de escape, \ n .

Al igual que una matriz en C o Java, podemos acceder a los elementos de una lista especificando un número de índice después del nombre de la variable, entre paréntesis. Los números de índice comienzan en cero; en otras palabras, el elemento n de una lista tiene el índice numérico n -1.

Nota: si se pregunta por qué los números de índice comienzan en cero en lugar de uno, no está solo. Los científicos informáticos han debatido la utilidad de los sistemas de numeración basados ​​en cero en el pasado. En 1982, Edsger Dijkstra dio su opinión sobre el tema, explicando por qué la numeración basada en cero es la mejor forma de indexar datos en informática. Usted puede leer el memo usted mismo - él hace un argumento convincente.

Podemos imprimir el primer elemento de las líneas especificando el número de índice 0, incluido entre paréntesis después del nombre de la lista:

 imprimir (mylines [0]) 

Salida

 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc fringilla arcu congue metus aliquam mollis. 

O la tercera línea, especificando el número de índice 2:

 imprimir (mylines [2]) 

Salida

 Quisque en dignissim lacus. 

Pero si intentamos acceder a un índice para el que no hay valor, obtenemos un error:

 imprimir (mylines [3]) 

Salida

 Seguimiento (última llamada más reciente): archivo, línea, en impresión (mylines [3]) IndexError: índice de lista fuera de rango 

Un objeto de lista es un iterador, por lo que para imprimir todos los elementos de la lista, podemos iterar sobre él con ... en :

 mylines = [] # Declare una lista vacía con open ('lorem.txt', 'rt') como myfile: # Abra lorem.txt para leer el texto. para línea en myfile: # Para cada línea de texto, mylines.append (línea) # agrega esa línea a la lista. para el elemento en mylines: # Para cada elemento de la lista, imprimir (elemento) # imprimirlo. 

Salida

 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris nec maximus purus. Las mecenas se sientan amet pretium tellus. Quisque en dignissim lacus. 

Pero todavía estamos recibiendo nuevas líneas adicionales. Cada línea de nuestro archivo de texto termina en un carácter de nueva línea (' \ n '), que se está imprimiendo. Además, después de imprimir cada línea, print () agrega una nueva línea propia, a menos que usted le indique lo contrario.

Podemos cambiar este comportamiento predeterminado especificando un parámetro final en nuestra llamada a print () :

 imprimir (elemento, fin = '') 

Al establecer el final de una cadena vacía (representada como dos comillas simples, sin espacio entre ellas), le decimos a print () que no imprima nada al final de una línea, en lugar de un carácter de nueva línea.

Nuestro programa revisado se ve así:

 mylines = [] # Declare una lista vacía con open ('lorem.txt', 'rt') como myfile: # Abra el archivo lorem.txt para leer el texto de la línea en myfile: # Para cada línea de texto, mylines.append ( línea) # agrega esa línea a la lista. para el elemento en mylines: # Para cada elemento en la lista, imprima (element , end = '' ) # imprímalo , sin nuevas líneas adicionales . 

Salida

 Lorem ipsum dolor sit amet, consectetur adipiscing elit.Mauris nec maximus purus. Las mecenas se sientan amet pretium tellus. 

Quisque en dignissim lacus.

Las nuevas líneas que ves aquí están realmente en el archivo; son un carácter especial (' \ n ') al final de cada línea. Queremos deshacernos de estos, para que no tengamos que preocuparnos por ellos mientras procesamos el archivo.

Cómo despojar nuevas líneas

Para eliminar completamente las nuevas líneas, podemos despojarlos. Eliminar una cadena es eliminar uno o más caracteres, generalmente espacios en blanco, desde el principio o el final de la cadena.

Consejo: este proceso a veces también se denomina "recorte".

Los objetos de cadena de Python 3 tienen un método llamado rstrip (), que elimina los caracteres del lado derecho de una cadena. El idioma inglés se lee de izquierda a derecha, por lo que al quitarlo del lado derecho se eliminan los caracteres del final.

Si la variable se llama mystring, podemos eliminar su lado derecho con mystring.rstrip ( chars ), donde chars es una cadena de caracteres a strip, si están en el lado derecho de la cadena. Por ejemplo, "123abc" .rstrip ("bc") devuelve 123a .

Sugerencia: cuando representa una cadena en su programa con su contenido literal, se llama una cadena literal. En Python (como en la mayoría de los lenguajes de programación), los literales de cadena siempre están entre comillas, encerradas en uno u otro lado por comillas simples (') o dobles ("). En Python, las comillas simples y dobles son equivalentes; puede usar una u otra. siempre y cuando coincidan en los dos extremos de la cadena. Es tradicional representar una cadena legible para las personas (como Hello ) entre comillas dobles ( "Hola" ). Si está representando un solo carácter (como b ), o un solo carácter especial como el carácter de nueva línea ( \ n ), es tradicional usar comillas simples ( 'b', '\ n' ). Para obtener más información sobre cómo usar cadenas en Python, puede leer la documentación de las cadenas. en pitón.

La cadena de instrucciones .rstrip ('\ n') eliminará un carácter de nueva línea del lado derecho de la cadena . La siguiente versión de nuestro programa elimina las líneas nuevas cuando se lee cada línea del archivo de texto:

 mylines = [] # Declara una lista vacía. con abrir ('lorem.txt', 'rt') como myfile: # Abra lorem.txt para leer el texto. para myline en myfile: # Para cada línea en el archivo, mylines.append (myline.rstrip ('\ n')) # quitar nueva línea y agregar a la lista. para el elemento en mylines: # Para cada elemento de la lista, imprimir (elemento) # imprimirlo. 

El texto ahora se almacena en una variable de lista, por lo que se puede acceder a las líneas individuales por número de índice. Las líneas nuevas se han eliminado, por lo que no tenemos que preocuparnos por ellas. Siempre podemos devolverlos más tarde si reconstruimos el archivo y lo escribimos en el disco.

Ahora, busquemos en las líneas de la lista una subcadena específica.

Digamos que queremos localizar cada aparición de una determinada frase, o incluso una sola letra. Por ejemplo, tal vez necesitamos saber dónde está cada "e". Podemos lograr esto usando el método find () de la cadena.

La lista almacena cada línea de nuestro texto como un objeto de cadena. Todos los objetos de cadena tienen un método, find (), que ubica la primera aparición de una subcadena en la cadena.

Usemos el método find () para buscar la letra "e" en la primera línea de nuestro archivo de texto, que está almacenada en la lista mylines . El primer elemento de mylines es un objeto de cadena que contiene la primera línea del archivo de texto. Este objeto de cadena tiene un método find () .

En los paréntesis de find (), especificamos los parámetros. El primer y único parámetro requerido es la cadena a buscar, "e" . La declaración mylines [0] .find ("e") le dice al intérprete que comience al principio de la cadena y busque hacia adelante, un carácter a la vez, hasta que encuentre la letra "e". Cuando encuentra uno, deja de buscar y devuelve el número de índice donde se encuentra esa "e". Si llega al final de la cadena, devuelve -1 para indicar que no se encontró nada.

 imprimir (mylines [0] .find ("e")) 

Salida

3

El valor de retorno "3" nos dice que la letra "e" es el cuarto carácter, la "e" en "Lorem". (Recuerde que el índice se basa en cero: el índice 0 es el primer carácter, 1 es el segundo, etc.)

El método find () toma dos parámetros opcionales adicionales: un índice de inicio y un índice de parada, que indican dónde debe comenzar y terminar la búsqueda en la cadena. Por ejemplo, la cadena .find ("abc", 10, 20) buscará la subcadena "abc", pero solo del 11 al 21 carácter. Si no se especifica la detención, find () comenzará al inicio del índice y se detendrá al final de la cadena.

Por ejemplo, la siguiente declaración busca "e" en mylines [0], comenzando con el quinto carácter.

 imprimir (mylines [0] .find ("e", 4)) 

Salida

 24 

En otras palabras, a partir del quinto carácter de la línea [0], la primera "e" se ubica en el índice 24 (la "e" en "nec").

Para comenzar a buscar en el índice 10, y detenerse en el índice 30:

 imprimir (mylines [1] .find ("e", 10, 30)) 

Salida

 28 

(La primera "e" en "mecenas").

Si find () no ubica la subcadena en el rango de búsqueda, devolverá el número -1, indicando falla:

 imprimir (mylines [0] .find ("e", 25, 30)) 

Salida

-1

No hubo "e" ocurrencias entre los índices 25 y 30.

Encontrar todas las apariciones de una subcadena.

Pero, ¿qué sucede si queremos localizar cada aparición de una subcadena, no solo la primera que encontramos? Podemos iterar sobre la cadena, a partir del índice de la coincidencia anterior.

En este ejemplo, usaremos un bucle while para encontrar repetidamente la letra "e". Cuando se encuentra una ocurrencia, llamamos a encontrar nuevamente, comenzando desde una nueva ubicación en la cadena. Específicamente, la ubicación de la última aparición, más la longitud de la cadena (para que podamos avanzar más allá de la última). Cuando find devuelve -1, o el índice de inicio excede la longitud de la cadena, paramos.

 # Construya mylines como se muestra arriba mylines = [] # Declare una lista vacía. con abrir ('lorem.txt', 'rt') como myfile: # Abra lorem.txt para leer el texto. para myline en myfile: # Para cada línea en el archivo, mylines.append (myline.rstrip ('\ n')) # quitar nueva línea y agregar a la lista. # Localice e imprima todas las apariciones de la letra "e" índice = 0 # índice actual prev = 0 # índice anterior str = mylines [0] # cadena a buscar (primer elemento de mylines) substr = "e" # subcadena para buscar while index = len (str)) print ('\ n' + str); # Imprimir la cadena original debajo de las e 

Salida

 eeeee Lorem ipsum dolor sit amet, consectetur adipiscing elit. ee Nunc fringilla arcu congue metus aliquam mollis. 

Incorporando expresiones regulares

Para búsquedas complejas, debes usar expresiones regulares.

El módulo de expresiones regulares de Python se llama re . Para usarlo en su programa, importe el módulo antes de usarlo:

 importar re 

El módulo re implementa expresiones regulares al compilar un patrón de búsqueda en un objeto de patrón. Los métodos de este objeto se pueden utilizar para realizar operaciones de coincidencia.

Por ejemplo, supongamos que desea buscar cualquier palabra en su documento que comienza con la letra d y termina en la letra r . Podemos lograr esto usando la expresión regular " \ bd \ w * r \ b ". ¿Qué significa esto?

secuencia de caracteressentido
\segundoEl límite de una palabra coincide con una cadena vacía (cualquier cosa, sin incluir nada en absoluto), pero solo si aparece antes o después de un carácter que no sea una palabra. Los "caracteres de palabra" son los dígitos del 0 al 9, las letras en minúscula y mayúscula, o un guión bajo (" _ ").
reLetra minúscula d .
\ w *\ w representa cualquier carácter de palabra, y * es un cuantificador que significa "cero o más del carácter anterior". Entonces \ w * coincidirá con cero o más caracteres de palabras.
rLetra minúscula r .
\segundoLímite de la palabra.

Por lo tanto, esta expresión regular coincidirá con cualquier cadena que pueda describirse como "un límite de palabra, luego una 'd' en minúscula, luego cero o más caracteres de palabra, luego una 'r' en minúscula, luego un límite de palabra". las cadenas que se pueden describir de esta manera incluyen las palabras destructor, agrio y médico, y la abreviatura dr .

Para usar esta expresión regular en las operaciones de búsqueda de Python, primero la compilamos en un objeto de patrón. Por ejemplo, la siguiente declaración de Python crea un objeto de patrón denominado patrón que podemos usar para realizar búsquedas usando esa expresión regular.

 patrón = re.compile (r "\ bd \ w * r \ b") 

Nota: La letra r antes de nuestra cadena en la declaración anterior es importante. Le dice a Python que interprete nuestra cadena como una cadena en bruto, exactamente como la hemos escrito. Si no prefijamos la cadena con una r, Python interpretaría las secuencias de escape como \ b de otras maneras. Siempre que necesite que Python interprete sus cadenas literalmente, especifíquelas como una cadena sin procesar prefijándola con r .

Ahora podemos usar los métodos del objeto de patrón, como buscar () para buscar una cadena para la expresión regular compilada, buscando una coincidencia. Si encuentra uno, devolverá un resultado especial llamado objeto de coincidencia. De lo contrario, devuelve Ninguno, una constante de Python incorporada que se usa como el valor booleano "falso".

Ejemplo

 import re str = "Buenos días, doctor." pat = re.compile (r "\ bd \ w * r \ b") # compile regex "\ bd \ w * r \ b" a un objeto de patrón si pat.search (str)! = None: # Search for the modelo. Si lo encuentra, imprima ("Lo encontré") 

Salida

 Lo encontré. 

Para realizar una búsqueda que no distinga mayúsculas y minúsculas, puede especificar la constante especial re.IGNORECASE en el paso de compilación:

 import re str = "Hola, DoctoR". pat = re.compile (r "\ bd \ w * r \ b", re.IGNORECASE) # mayúsculas y minúsculas coincidirán si pat.search (str)! = None: print ("Found it.") 

Salida

 Lo encontré. 

Poniendolo todo junto

Así que ahora sabemos cómo abrir un archivo, leer las líneas en una lista y ubicar una subcadena en cualquier elemento dado de esa lista. Usemos este conocimiento para construir algunos programas de ejemplo.

Imprimir todas las líneas que contienen subcadenas

El siguiente programa lee un archivo de registro línea por línea. Si la línea contiene la palabra "error", se agrega a una lista llamada errores . Si no, se ignora. El método de cadena inferior () convierte todas las cadenas a minúsculas para fines de comparación, lo que hace que la búsqueda sea insensible a mayúsculas y minúsculas sin alterar las cadenas originales.

Tenga en cuenta que el método find () se llama directamente en el resultado del método lower () ; Esto se llama encadenamiento de método . Además, tenga en cuenta que en la declaración print (), construimos una cadena de salida uniendo varias cadenas con el operador + .

 errors = [] # La lista donde almacenaremos los resultados. linenum = 0 substr = "error" .lower () # Substring para buscar. con open ('logfile.txt', 'rt') como myfile: for line in myfile: linenum + = 1 si line.lower (). find (substr)! = -1: # si coincide con mayúsculas y minúsculas, errores. anexar ("Line" + str (linenum) + ":" + line.rstrip ('\ n')) para errar errores: imprimir (err) 

Salida

 Línea 6: 28 de marzo 09:10:37 Error: no se puede contactar con el servidor. Conexión denegada. Línea 10: 28 de marzo, 10:28:15 Error del núcleo: la ubicación especificada no está montada. Línea 14: 28 de marzo 11:06:30 ERROR: usb 1-1: no se puede establecer la configuración, salir. 

Extrae todas las líneas que contienen subcadenas, usando expresiones regulares

El siguiente programa es similar al programa anterior, pero usando el módulo de expresiones regulares. Los errores y los números de línea se almacenan como tuplas, por ejemplo, (linenum, línea). La tupla se crea con los paréntesis adicionales que se incluyen en la declaración errors.append () . Los elementos de la tupla tienen una referencia similar a una lista, con un índice de base cero entre paréntesis. Tal como se construye aquí, err [0] es un linenum y err [1] es la línea asociada que contiene un error.

 import re errors = [] linenum = 0 pattern = re.compile ("error", re.IGNORECASE) # Compile una expresión regular que no distinga mayúsculas de minúsculas con open ('logfile.txt', 'rt') como myfile: for line in myfile : linenum + = 1 if pattern.search (line)! = None: # Si se encuentra una coincidencia errors.append ((linenum, line.rstrip ('\ n'))) por errores en los errores: # Iterate sobre la lista de tuplas impresas ("Línea" + str (err [0]) + ":" + err [1]) 

Salida (igual que arriba)

 Línea 6: 28 de marzo 09:10:37 Error: no se puede contactar con el servidor. Conexión denegada. Línea 10: 28 de marzo, 10:28:15 Error del núcleo: la ubicación especificada no está montada. Línea 14: 28 de marzo 11:06:30 ERROR: usb 1-1: no se puede establecer la configuración, salir. 

Extrae todas las líneas que contienen un número de teléfono

El siguiente programa imprime cualquier línea de un archivo de texto, info.txt, que contiene un número de teléfono internacional o de EE. UU. Esto se logra con la expresión regular " (\ + \ d {1, 2})? [\ S .-]? \ D {3} [\ s .-]? \ D {4} ". Esta expresión regular coincide con las siguientes notaciones de número de teléfono:

  • 123-456-7890
  • (123) 456-7890
  • 123 456 7890
  • 123.456.7890
  • +91 (123) 456-7890
 import re errors = [] linenum = 0 pattern = re.compile (r "(\ + \ d {1, 2})? [\ s .-]? \ d {3} [\ s .-]? \ d {4} ") con open ('info.txt', 'rt') como myfile: for line in myfile: linenum + = 1 if pattern.search (line)! = None: # Si la búsqueda del patrón encuentra una coincidencia, errores .append ((linenum, line.rstrip ('\ n'))) para err en errores: imprime ("Line", str (err [0]), ":" + err [1]) 

Salida

 Línea 3: Mi número de teléfono es 731.215.8881. Línea 7: puede comunicarse con el Sr. Walters al (212) 558-3131. Línea 12: Puede comunicarse con su agente, la Sra. Kennedy, al +12 (123) 456-7890 Línea 14: También puede comunicarse con ella al (888) 312.8403, extensión 12. 

Buscar un diccionario de palabras

El siguiente programa busca en el diccionario las palabras que comienzan con h y terminan en pe . Para la entrada, utiliza un archivo de diccionario incluido en muchos sistemas Unix, / usr / share / dict / words .

 import re filename = "/ usr / share / dict / words" patrón = re.compile (r "\ bh \ w * pe $", re.IGNORECASE) con open (filename, "rt") como myfile: for line in myfile: if pattern.search (line)! = None: print (line, end = '') 

Salida

 Esperanza heliotropo esperanza hornpipe horóscopo bombo