python

Script para escribir créditos en el encabezado de archivos

En este post te voy a compartir un script de Python. Se trata de un programa que escribe los créditos o un encabezado que quieras a todos los archivos de código fuente que encuentre, poniéndolos como comentario.

Por ejemplo, si tienes 10 archivos con la extensión js, puedes indicarle al script que coloque los créditos en todos esos archivos, ahorrando bastante tiempo.

El encabezado y los tipos de archivos

Está programado en Python. Primero definimos los créditos dentro de una cadena, así como un diccionario que indica cómo inicia y cómo termina un bloque de comentarios en cada lenguaje de programación.

creditos = """
    Programado por Luis Cabrera Benito 
  ____          _____               _ _           _       
 |  _ \        |  __ \             (_) |         | |      
 | |_) |_   _  | |__) |_ _ _ __ _____| |__  _   _| |_ ___ 
 |  _ <| | | | |  ___/ _` | '__|_  / | '_ \| | | | __/ _ \\
 | |_) | |_| | | |  | (_| | |   / /| | |_) | |_| | ||  __/
 |____/ \__, | |_|   \__,_|_|  /___|_|_.__/ \__, |\__\___|
         __/ |                               __/ |        
        |___/                               |___/         
    
    
    Blog:       https://parzibyte.me/blog
    Ayuda:      https://parzibyte.me/blog/contrataciones-ayuda/
    Contacto:   https://parzibyte.me/blog/contacto/
"""
comentario_comun = {
    'inicio': '/*',
    'fin': '*/',
}
comentarios = {
    'txt': {
        'inicio': '',
        'fin': '',
    },
    'ts': comentario_comun,
    'js': comentario_comun,
    'ino': comentario_comun,
    'java': comentario_comun,
    'php': {
        'inicio': "<?php\n/*",
        'fin': '*/ ?>',
    },
    'py': {
        'inicio': '"""',
        'fin': '"""',
    },
    'html': {
        'inicio': '<!--',
        'fin': '-->',
    },
    'go': comentario_comun,
    'c': comentario_comun,
}

Debido a que la mayoría de lenguajes de programación usan /* y */ he llamado a ese tipo de comentarios comentario_comun, pero hay algunas excepciones, por ejemplo en HTML o PHP.

Lectura de argumentos

El script se debe ejecutar desde la terminal y recibe dos argumentos posicionales. El primero es la extensión de los archivos a los que vamos a colocar el encabezado, y el segundo, el directorio en donde se encuentran.

Por lo tanto debemos parsear y leer esos argumentos. Además, si la extensión todavía no está soportada, lo indicamos y detenemos la ejecución.

parser = argparse.ArgumentParser()
parser.add_argument("extension", help="Extensión de los archivos a modificar")
parser.add_argument("directorio_archivos",
                    help="Ubicación de directorio que tiene los archivos con determinada extensión")
argumentos = parser.parse_args()
if not comentarios.get(argumentos.extension):
    print("Extensión {} todavía no soportada".format(argumentos.extension))
    sys.exit(-1)

Escribir encabezado

Finalmente, cuando la extensión y el directorio son válidos, abrimos el directorio y buscamos archivos con la extensión proporcionada.

Por cada uno obtenemos su contenido, le agregamos el encabezado y guardamos todo eso de nuevo en el archivo.

comentarios_archivo_actual = comentarios[argumentos.extension]
directorio = argumentos.directorio_archivos
os.chdir(directorio)
for nombre_archivo in glob.glob("*."+argumentos.extension):
    ruta = directorio+"/"+nombre_archivo
    with open(ruta, "r") as archivo:
        contenido = comentarios_archivo_actual["inicio"] + "\n" + \
            creditos + \
            comentarios_archivo_actual["fin"] + "\n" + archivo.read()
    with open(ruta, "w") as archivo:
        archivo.write(contenido)
    print("Agregados créditos a {}".format(ruta))

Poniendo todo junto

Así que el código completo queda así:

"""

    Programado por Luis Cabrera Benito 
  ____          _____               _ _           _       
 |  _ \        |  __ \             (_) |         | |      
 | |_) |_   _  | |__) |_ _ _ __ _____| |__  _   _| |_ ___ 
 |  _ <| | | | |  ___/ _` | '__|_  / | '_ \| | | | __/ _ \
 | |_) | |_| | | |  | (_| | |   / /| | |_) | |_| | ||  __/
 |____/ \__, | |_|   \__,_|_|  /___|_|_.__/ \__, |\__\___|
         __/ |                               __/ |        
        |___/                               |___/         
    
    
    Blog:       https://parzibyte.me/blog
    Ayuda:      https://parzibyte.me/blog/contrataciones-ayuda/
    Contacto:   https://parzibyte.me/blog/contacto/
"""
import argparse
import glob
import os
import sys
creditos = """
    Programado por Luis Cabrera Benito 
  ____          _____               _ _           _       
 |  _ \        |  __ \             (_) |         | |      
 | |_) |_   _  | |__) |_ _ _ __ _____| |__  _   _| |_ ___ 
 |  _ <| | | | |  ___/ _` | '__|_  / | '_ \| | | | __/ _ \\
 | |_) | |_| | | |  | (_| | |   / /| | |_) | |_| | ||  __/
 |____/ \__, | |_|   \__,_|_|  /___|_|_.__/ \__, |\__\___|
         __/ |                               __/ |        
        |___/                               |___/         
    
    
    Blog:       https://parzibyte.me/blog
    Ayuda:      https://parzibyte.me/blog/contrataciones-ayuda/
    Contacto:   https://parzibyte.me/blog/contacto/
"""
comentario_comun = {
    'inicio': '/*',
    'fin': '*/',
}
comentarios = {
    'txt': {
        'inicio': '',
        'fin': '',
    },
    'ts': comentario_comun,
    'js': comentario_comun,
    'ino': comentario_comun,
    'java': comentario_comun,
    'php': {
        'inicio': "<?php\n/*",
        'fin': '*/ ?>',
    },
    'py': {
        'inicio': '"""',
        'fin': '"""',
    },
    'html': {
        'inicio': '<!--',
        'fin': '-->',
    },
    'go': comentario_comun,
    'c': comentario_comun,
}
parser = argparse.ArgumentParser()
parser.add_argument("extension", help="Extensión de los archivos a modificar")
parser.add_argument("directorio_archivos",
                    help="Ubicación de directorio que tiene los archivos con determinada extensión")
argumentos = parser.parse_args()
if not comentarios.get(argumentos.extension):
    print("Extensión {} todavía no soportada".format(argumentos.extension))
    sys.exit(-1)

comentarios_archivo_actual = comentarios[argumentos.extension]
directorio = argumentos.directorio_archivos
os.chdir(directorio)
for nombre_archivo in glob.glob("*."+argumentos.extension):
    ruta = directorio+"/"+nombre_archivo
    with open(ruta, "r") as archivo:
        contenido = comentarios_archivo_actual["inicio"] + "\n" + \
            creditos + \
            comentarios_archivo_actual["fin"] + "\n" + archivo.read()
    with open(ruta, "w") as archivo:
        archivo.write(contenido)
    print("Agregados créditos a {}".format(ruta))

Modo de uso y demostración

Para terminar el post voy a mostrar cómo usar este script. Obviamente debes instalar Python y agregar a la PATH.

El modo de uso es:

escribir_contenido.py [-h] extension directorio_archivos

Por ejemplo:

Escribir créditos en encabezado con script automático

Puedes ver el script junto con otras herramientas en mi repositorio de GitHub.

Te invito a leer más sobre Python en mi sitio web.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

2 semanas hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

2 semanas hace

Esta web usa cookies.