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:
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.