Script en Python para extraer emails de un archivo de texto

En esta publicación te enseñaré a extraer el listado de emails de un fichero.

  • Tiempo de implementación: 2 min
  • Nivel de dificultad: Fácil

Este script te permitirá extraer emails y correos electrónicos de manera eficiente, funcionando como un potente extractor de correos.

EMail Extractor: Script en Python para obtener los correos electrónicos

El propósito general de este script en Python es extraer emails y correos electrónicos de un archivo de texto y guardarlos en un archivo CSV. A través de expresiones regulares, este script busca patrones que se asemejen a direcciones de correo electrónico, los extrae y posteriormente los exporta a un archivo CSV, garantizando que el nombre del archivo de salida sea único.

Copia y pega el contenido de este bloque en un fichero de texto que puedes llamar: extraeremails.py:

# -------------------------------------------------------------
# Autor: Daniel Pajuelo
# Web: https://danielpajuelo.com
# Versión: 1.0
# -------------------------------------------------------------

import re
import csv
import os
import sys

def extract_emails(file_path):
    email_regex = r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}'
    
    with open(file_path, 'r', encoding='utf-8') as file:
        file_content = file.read()
        emails = re.findall(email_regex, file_content)
    
    return emails

def save_emails_to_csv(emails, output_filename):
    base_name, ext = os.path.splitext(output_filename)
    counter = 1
    while os.path.exists(output_filename):
        output_filename = f"{base_name}_{counter}{ext}"
        counter += 1
    
    with open(output_filename, 'w', newline='', encoding='utf-8') as csvfile:
        writer = csv.writer(csvfile)
        writer.writerow(["Email"])  
        for email in emails:
            writer.writerow([email])

def main():
    if len(sys.argv) != 2:
        print("Uso: python script_name.py [input_file_path]")
        return
    
    input_filepath = sys.argv[1]
    
    if not os.path.exists(input_filepath):
        print("El archivo de entrada no existe.")
        return
    
    base_name, _ = os.path.splitext(input_filepath)
    output_filename = f"{base_name}_emails.csv"
    
    emails = extract_emails(input_filepath)
    
    if emails:
        save_emails_to_csv(emails, output_filename)
        print(f"Los emails han sido guardados en {output_filename}")
    else:
        print("No se encontraron emails en el archivo proporcionado.")

if __name__ == "__main__":
    main()

Ejemplos de uso

Este script está diseñado para ser utilizado desde la línea de comandos y espera que se le proporcione la ruta de un archivo de texto como argumento. A continuación, se presentan tres escenarios posibles:

  1. Extraer correos de un archivo de texto común:
    python script_name.py path/to/textfile.txt
    Podría ser utilizado para extraer correos electrónicos de un archivo que contiene, por ejemplo, logs o textos de un foro.
  2. Extraer correos de un archivo de exportación de emails:
    codepython script_name.py path/to/emails_export.txt
    Ideal para extraer direcciones de correo electrónico de un archivo que contiene correos electrónicos exportados de un gestor de listas de correo.
  3. Extraer correos de un documento con actas de reuniones:
    python script_name.py path/to/meeting_minutes.txt
    Útil para recuperar todas las direcciones de correo electrónico mencionadas en un archivo de actas de reuniones.

Este extractor de correos es versátil y puede usarse para extraer emails de una web, sacar emails de diferentes tipos de archivos, o incluso extraer correos de un texto en Excel (convirtiendo primero el archivo de Excel a texto).

Explicación del código

Vamos a descomponer cada función:

extract_emails(file_path)

  1. Input: Ruta del archivo (file_path) desde el cual se extraerán los correos electrónicos.
  2. Proceso: Abre y lee el archivo, y utiliza una expresión regular para encontrar todas las coincidencias que parecen ser emails o correos electrónicos.
  3. Output: Lista de correos electrónicos extraídos.

save_emails_to_csv(emails, output_filename)

  1. Input: Lista de emails y nombre deseado para el archivo de salida (output_filename).
  2. Proceso: Verifica si un archivo con el nombre deseado ya existe y ajusta el nombre de ser necesario para evitar sobreescritura. Luego, escribe las direcciones de correo electrónico en un archivo CSV.
  3. Output: Archivo CSV con las direcciones de correo electrónico.

main()

  1. Proceso: Verifica que la invocación del script tenga el número correcto de argumentos (la ruta al archivo de entrada). Si los argumentos son correctos, y el archivo existe, llama a las funciones definidas anteriormente para extraer los correos electrónicos y guardarlos en un archivo CSV.

Bloque if __name__ == "__main__":

  • Ejecuta la función main() solo si el script es invocado directamente (no cuando es importado como un módulo).

Adapta el script a tus necesidades

Este script en Python es una herramienta poderosa para extraer correos electrónicos de diversos tipos de archivos. Ya sea que necesites extraer emails de una web, sacar emails de documentos de texto, o incluso extraer correo de un texto en Excel, este extractor de correos te ayudará a hacerlo de manera eficiente. Recuerda que puedes adaptar el script según tus necesidades específicas, como por ejemplo para trabajar con archivos CSV de correos.»

Daniel Pajuelo
Daniel Pajuelo es ingeniero informático y SEO Senior, actualmente trabajando en Guruwalk e impartiendo clases en BIG School (antes BIGSEO Academy). Ver más

Continua leyendo

Herramienta para limpiar de emails peligrosos las listas de correo

Siguiendo estos pasos aprenderás a programar una herramienta para limpiar tu base de datos de direcciones de correo electrónico peligrosas e indeseadas.

Cómo limpiar una base de datos de emails inválidos

Te enseño a crear un script en Python para limpiar una base de datos de ... Leer más