ASIX-M3-UF3-A2.1- Solucions Exercicis fitxers de text
De wikiserver
La revisió el 13:19, 14 set 2023 per Jmoreno (Discussió | contribucions)
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.
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.")
4. El fitxer comarques.txt conté un llistat de les comarques de Catalunya. És un fitxer de text i cada comarca ocupa una línia. Feu un programa amb un menú que ens permeti executar els mètodes per.
# Ruta al archivo de la lista
file = "comarques.txt"
# Nuevo nombre de archivo para las funciones (tareas) 3 y 4
new_file = ""
# Diccionario para las funciones (tareas) 2 y 3
diccionario = {}
# Función para comprobar que se ha introducido un número entero para menu()
def get_choice():
try:
choice = int(input("Seleccione la opción de menú: "))
return choice
except ValueError:
print("Entrada inválida. Por favor ingrese un número entero válido.")
return get_choice()
# Tarea 1.
def tarea_1():
# contador
counter = 0
# Pedir que se introduzca una letra
letra = input("Introduzca una letra: ")
# Comprobar que sólo se introduce una letra y que se trata de una letra latina
if len(letra) != 1 or not letra.isalpha():
print("Sólo tiene que introducir una letra latina.")
else:
# Si todo va bien, convertir la letra en mayúscula, ya que todos los nombres del archivo empiezan por mayúscula
if letra.islower():
letra = letra.upper()
# Imprimir la lista
print("Lista de comarcas:\n")
# Abrir el fichero para leer (r)
with open(file, 'r') as f:
# leer cada línea
for line in f:
# si la línea empieza por la "letra", la imprimir y actualizar el contador
if line.startswith(letra):
print(line.strip())
counter += 1
# Imprimir contador
print(f'Total comarcas que empiezan por la letra {letra}: {counter}\n')
# Volver a menu
menu()
# Tarea 2.
def tarea_2():
# Importar el diccionario global
global diccionario
# Leer el fichero
with open(file, 'r') as f:
# leer cada línea del archivo
for line in f:
# eliminar los caracteres de salto de línea y los espacios al final y al principio de una línea
line = line.strip()
# comprobar que la línea no está vacía
if line:
# primer carácter de la línea
prim_char = line[0]
# si aún no se ha encontrado el carácter, añádir lo al diccionario
if prim_char not in diccionario:
diccionario[prim_char] = 1
# si el carácter ya está en el diccionario, aumentar contador de letras
else:
diccionario[prim_char] += 1
# Imprimir el diccionario
print(f"La operación ha generado un diccionario: {dict}\n")
# Volver a menu
menu()
# Tarea 3.
def tarea_3():
# Importar el diccionario global
global diccionario
# Importar el nombre para fichero nuevo
global new_file
# revisión de diccionario
if not diccionario:
print("El diccionario está vacío. Genere un diccionario utilizando la opción 2 del menú.")
menu()
# Generar nombre para nuevo fichero
fichero_parts = file.rsplit('.', 1)
new_file = '_new.'.join(fichero_parts)
# Crear un nuevo archivo y guardar en él los datos del diccionario
with open(new_file, 'w') as f:
for letra, num in diccionario.items():
f.write('{}\t{}\n'.format(letra, num))
# Imprimir que los datos se han guardado.
print(f"Se ha generado el archivo {new_file}.\n")
# Volver a menu
menu()
# Tarea 4.
def tarea_4():
try:
with open(new_file, "r") as f:
# si el fichero existe
counter = 0
for line in f:
# dividir la línea en una letra y un número
letra, num = line.split('\t')
# actualizar contador
counter += int(num.rstrip('\n'))
# Imprimir resultado
print(f"Total comarcas: {counter}.\n")
# Volver a menu
menu()
except FileNotFoundError:
# si el fichero no existe
print("El fichero no existe. Debe generarse utilizando la opción 3 del menú.\n")
menu()
def menu():
print("las comarcas de Cataluña.\n"
"1. Mostrar todas las comarcas que empiecen por una letra\n"
"2. Crear un diccionario de las comarcas\n"
"3. Crear un nuevo archivo con los datos del diccionario del apartado 2\n"
"4. A partir del archivo del ap. 3 sumar y mostrar cuantas comarcas existen\n"
"5. Salir")
mode = get_choice()
if mode == 1:
tarea_1()
elif mode == 2:
tarea_2()
elif mode == 3:
tarea_3()
elif mode == 4:
tarea_4()
elif mode == 5:
print("Adiós.")
quit()
else:
print("Ha seleccionado un valor no válido.")
menu()
menu()