Last active
April 11, 2023 09:03
-
-
Save 15Galan/e96117ae8cc4355e9ed191c75292a3d9 to your computer and use it in GitHub Desktop.
Script que recibe una ruta y un número de caracteres como argumento, y muestra una lista de aquellos archivos cuyo contenido sea inferior a dicho número de caracteres.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Si no recibe argumentos o falta alguno: | |
# - La ruta por defecto es la del script. | |
# - El número de caracteres por defecto es 500. | |
# Si falla alguno de los argumentos: | |
# - La ruta no existe, muestra un mensaje de error. | |
# - El número de caracteres no es positivo (o cero), muestra un mensaje de error. | |
import os | |
import sys | |
def read_args(): | |
""" | |
Función que lee los argumentos y los devuelve en una tupla. | |
Si detecta algún error en los argumentos alerta al usuario. | |
""" | |
path = os.path.dirname(os.path.abspath(__file__)) | |
size = 500 | |
# Lectura de los argumentos con control de errores | |
if 1 < len(sys.argv): | |
if os.path.exists(sys.argv[1]): | |
path = sys.argv[1] | |
else: | |
print('\033[91mLa ruta proporcionada no existe.\033[0m') | |
sys.exit(1) | |
if 2 < len(sys.argv): | |
if sys.argv[2].isdigit() and 0 <= int(sys.argv[2]): | |
size = int(sys.argv[2]) | |
else: | |
print('\033[91mEl número de caracteres debe ser positivo.\033[0m') | |
sys.exit(1) | |
# Advertencia de argumentos innecesarios (no interrumpe) | |
if 3 < len(sys.argv): | |
print('\033[93mHay más argumentos de los necesarios (se ignoran).\n\033[0m') | |
return path, size | |
def search_files(path, size): | |
""" | |
Función que busca los archivos en la ruta indicada y los añade | |
al conjunto de archivos si su tamaño es inferior al indicado. | |
""" | |
files = set() | |
# Búsqueda de los archivos | |
for file in os.listdir(path): | |
file_path = os.path.join(path, file) | |
if os.path.isfile(file_path): | |
with open(file_path, 'r') as f: | |
if len(f.read()) <= size: | |
files.add(file) | |
return files | |
def main(): | |
""" | |
Función principal del script. | |
""" | |
path, size = read_args() | |
files = search_files(path, size) | |
# Muestra los archivos encontrados | |
for file in sorted(files): | |
print(file) | |
if __name__ == '__main__': | |
""" | |
Punto de entrada del script. | |
""" | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment