Escribir créditos en encabezado con script automático
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.
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.
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)
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))
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))
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:
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.
En este post te quiero compartir un código de C++ para listar y cancelar trabajos…
Gracias a WebAssembly podemos ejecutar código de otros lenguajes de programación desde el navegador web…
Revisando y buscando maneras de imprimir un PDF desde la línea de comandos me encontré…
Esta semana estuve recreando la API del plugin para impresoras térmicas en Android (HTTP a…
Hoy te enseñaré a extraer la cadena base64 de una clave PEM usando una función…
Encender un foco con un Bot de Telegram es posible usando una tarjeta como la…
Esta web usa cookies.