ASIX-M3-UF3-A2.1- Solucions Exercicis fitxers de text

De wikiserver
Dreceres ràpides: navegació, cerca

1. Fes un programa que crei un diccionari en les dades dels empleats del fitxer de text empleats.txt. Y a continuació, el recorri mostrant les seves dades.

print("Un programa que cree un diccionario en los datos de los empleados del archivo de texto.\n")

# Crear un diccionario vacío para almacenar los datos de los empleados
empleados = {}

# Abrir el fichero para leer
fichero = open("empleats.txt", "r")

# Leer cada linea en el fichero
for i in fichero:
    # Dividir la línea (i) en campos utilizando el punto y coma como separador
    entrada = i.strip().split(';')

    # Extraer el id, nombre, apellidos y sueldo de los campos
    id = entrada[0]
    nombre = entrada[1]
    apellidos = entrada[2]
    sueldo = int(entrada[3])

    # Crear un list con nombre, apellidos y sueldo para cada entrada
    empleado_list = [nombre, apellidos, sueldo]

    # Añadir una lista al diccionario
    empleados[id] = empleado_list

# Cerrar el fichero
fichero.close()

# Imprimir el diccionario
print("{:<4} {:<10} {:<11} {:<8}".format("Id", "Nombre", "Apellidos", "Sueldo"))
print("-" * 34)
for id, data in empleados.items():
    print("{:<4} {:<10} {:<11} {:<8}".format(id, data[0], data[1], data[2]))

2. Per aquest exercici, crea prèviament un fitxer de text, que contingui només un número. Fes un mètode que pugui rebre 0, 1 o 2 paràmetres.

import sys

print("Un programa con parámetros.\n")

file = "UF3-A2.1-02.txt"

# Obtener una lista de argumentos (el primer argumento es el nombre del propio script, no hace falta)
args = sys.argv[1:]

# Contar el número de argumentos
num_args = len(args)

# Abrir fichero para escribir
fichero = open(file, "r+")
# Leer primer linea
primera_linea = fichero.readline()
# Volver a principio del fichero
fichero.seek(0)
try:
    numero = int(primera_linea)
except ValueError:
    print("La primera línea del fichero no contiene ningún número.")
    exit()

# Procesar el resultado según los argumentos
if num_args == 0:
    # Si no se dan argumentos
    print(f"En el archivo {file} hay un número: {numero}.")
elif num_args == 1:
    # Si solo se da 1 argumento
    if args[0] == "inc":
        print(f"El valor aumentado es ahora: {numero + 1}")
        fichero.writelines(str(numero + 1))
    elif args[0] == "dec":
        print(f"El valor reducido es ahora: {numero - 1}")
        fichero.writelines(str(numero - 1))
    else:
        print(f"Argumento {args[0]} desconocido.")
elif num_args == 2:
    # Si solo se da 2 argumentos
    try:
        # Convertir args[1] a entero
        arg1_numero = int(args[1])
        if args[0] == "inc":
            print(f"El valor aumentado es ahora: {numero + arg1_numero}")
            fichero.writelines(str(numero + arg1_numero))
        elif args[0] == "dec":
            print(f"El valor reducido es ahora: {numero - arg1_numero}")
            fichero.writelines(str(numero - arg1_numero))
        else:
            print(f"Argumento {args[0]} desconocido.")
    except ValueError:
        # Si la conversión falló, entonces no es un número entero.
        print(f"El argumento {args[1]} no es un número entero.")
else:
    print("Demasiados argumentos.")

# Cerrar el fichero
fichero.close()

3. Fes un mètode per xifrar un fitxer de text. Rebrà com a paràmetre un fitxer de text i crearà un altre, afegint al nom de l'original "_cod" i amb la mateixa extensió. L'algoritme de xifrat consisteix en.

import os

print("Programa de cifrado de archivos.\n")


# Función para cifrar archivo
def encrypt(file):
    # Abrir el fichero para leer
    fichero = open(file, "r")
    # Leer contenido del fichero
    contenido = fichero.read()
    # Crear contenido encryptado
    contenido_encryptado = ''

    for i in contenido:
        if i.islower():
            # Cifrar caracteres de la "a" a la "z"
            encryptado_i = (ord(i) - 11)
        elif i.isupper():
            # Cifrar caracteres de la "A" a la "Z"
            encryptado_i = (ord(i) + 15)
        elif i.isdigit():
            # Cifrar caracteres del "0" al "9"
            encryptado_i = (ord(i) + 13)
        else:
            # Dejar otros caracteres sin cambios
            encryptado_i = ord(i)
        contenido_encryptado += chr(encryptado_i)

    # Crear un nuevo fichero
    # Esta línea es necesaria si hay varios puntos en el nombre del archivo.
    fichero_parts = file.rsplit('.', 1)
    cod_fichero = '_cod.'.join(fichero_parts)
    with open(cod_fichero, 'w') as cod:
        # Escribir contenido cifrado en un archivo nuevo
        cod.write(contenido_encryptado)

    # Cerrar fichero
    fichero.close()

#file = "UF3-A2.1-03.txt"
file=input("Especifique el archivo que desea cifrar: ")

if os.path.exists(file):
   encrypt(file)
   print("La tarea se ha completado.")
else:
   print(f"El fichero {file} no existe.")