Está en la página 1de 5

Tema 7: Archivos y argumentos

Algoritmia, Grado en Matemáticas, Universidad de Alicante Curso 2021–2022

1. Manejo básico de archivos y argumentos

Tras resolver este conjunto de ejercicios, aprenderás a manejar archivos y argumentos en


Python. La mayoría de estos ejercicios son programas completos porque requieren que parte
(o toda) la información se pase por argumentos, pero eso no quita que debas crear funciones
para fragmentos del código que realicen funcionalidades específicas y que puedan servir más
adelante.

1.1. Guardar un mensaje cifrado

Crear dos programas que reciban una ruta de archivo por argumento: un programa para
guardar un texto cifrado, y otro para leer y descifrar un texto, ambos utilizando las funciones de
cifrar y descifrar de los ejercicios de la Unidad 3 (Cadenas de caracteres).
El programa para cifrar se ejecutaría de esta forma en una terminal (o como lo hace inter-
namente PyCharm al configurarle los argumentos):

$ python cifrar.py archivo.txt

Entonces pedirá al usuario introducir por teclado una contraseña, y justo después, pedirá
escribir un texto:

Introduzca una contraseña: SECRETO


Introduzca un texto a encriptar: Mi gato se llama Guantes

Guardará dicho texto en el archivo cuya ruta se ha dado por argumento al programa (en el
ejemplo previo, archivo.txt) y el programa acabará.
De forma similar, el programa para descifrar ejecutado de esta forma:

$ python descifrar.py archivo.txt

Pedirá una contraseña y descifrará el texto del contenido cifrado de ese archivo mostrándolo
por pantalla.

Introduzca una contraseña para descifrar: SECRETO


El texto descifrado es: Mi gato se llama Guantes

Matrices Página 1
Nota: en este ejercicio, para evitar que Python dé errores en algunos casos porque la cadena
cifrada tiene caracteres especiales, se deberá utilizar open() con el argumento encoding=ütf-
8" tras el argumento del modo lectura o escritura.

1.2. Guardar una lista en un archivo

Implementar una aplicación que reciba una ruta de archivo por argumento y que pida al
usuario una lista de números por teclado separados por coma y espacio. Después, el progra-
ma guardará esta lista en el archivo especificado. Por ejemplo:

$ python grabar_lista.py lista.txt


Introduzca una lista: 1, 2, 34, 20, 10

Esa cadena se debe convertir en lista y después se debe guardar en el archivo lista.txt,
escribiendo un número en cada línea. Es decir:

1
2
34
20
10

1.3. Calcular la media de una lista de números guardada en un archivo

Crear un programa que reciba por argumento la ruta de un archivo que contiene un número
de coma flotante por línea, y que calcule la media de todos esos números.
Es decir, suponiendo un archivo llamado numeros.txt con este contenido:

3.6234
385.4367
23.1937
887.32

Se deberá llamar y mostrar el resultado así:

$ python media_fichero.py numeros.txt


La media de los números del fichero es 324.89345

Matrices Página 2
1.4. Guardar una matriz aleatoria en un archivo

Mediante argumentos, pasarle a una aplicación el nombre de un archivo y las dimensiones


de una matriz y que cree una matriz aleatoria de esas dimensiones guardándola en ese archivo.
Por ejemplo:

$ python crea_matriz_aleatoria.py matriz.txt 5 6


Matriz 5x6 creada y guardada en ’matriz.txt’.

Puedes elegir el formato que quieras para guardar la matriz en el archivo, pero ten en cuenta
que necesitarás leerla en el ejercicio siguiente. Un buen formato es el que se crea al convertir
una lista en una cadena, es decir, str(lista).

1.5. Multiplicar dos matrices guardadas en dos archivos

Utilizando la herramienta que hemos creado en el ejercicio anterior, vamos a crear dos
archivos con dos matrices que se puedan multiplicar. En este ejercicio vamos a escribir un
programa que reciba estos dos archivos, lea las matrices correctamente, las multiplique y final-
mente guarde el resultado en un tercer archivo. Los nombres de los archivos se deben entregar
como argumento. Por ejemplo:

$ multiplica_matriz.py matriz1.txt matrix2.txt resultado.txt

De tal forma que lea las matrices guardadas en ’matriz1.txt’ y ’matriz2.txt’, las multiplique y
guarde el resultado en ’resultado.txt’.

1.6. Acceso de usuarios

Vamos a crear un programa que implemente un sistema de acceso a usuarios similar al que
podría tener una web. Para ello, primero el programa abrirá un archivo previamente creado lla-
mado contrasenyas.txt, el cual contendrá todos los correos y contraseñas de los usuarios
que queremos que accedan a nuestro sistema. El archivo debe contener los siguientes campos
con este formato:

email_usuario_1:contraseña1
email_usuario_2:contraseña2
email_usuario_3:contraseña3
...

De tal forma que cuando el programa se ejecute, después de procesar el archivo, le pida al
usuario un email y contraseña y compruebe que éste se encuentra en el archivo contrasen-
yas.txt y que las contraseñas coinciden. El usuario debe poder intentar entrar 3 veces si se

Matrices Página 3
equivoca pero no una cuarta. Tras 3 intentos fallidos, el programa acabará con un mensaje de
error escrito por la salida de error stderr. Si se introducen un email y contraseña correctos,
el programa mostrará un mensaje indicando que el acceso está permitido, y también acabará.
Por ejemplo, en el caso de que los datos sean correctos:

$ python acceso_usuarios.py contrasenyas.txt


Introduce tu email: lpla@dlsi.ua.es
Introduce tu contraseña: algoritmia123
Datos correctos, acceso permitido

En el caso de que todos los intentos son fallidos:

$ python acceso_usuarios.py contrasenyas.txt


Introduce tu email: lpla@dlsi.ua.es
Introduce tu contraseña: algoritmia123
Datos incorrectos, vuelve a intentarlo
Introduce tu email: lpla@dlsi.ua.es
Introduce tu contraseña: algoritmia123
Datos incorrectos, vuelve a intentarlo
Introduce tu email: lpla@dlsi.ua.es
Introduce tu contraseña: algoritmia123
Datos incorrectos, demasiados intentos. Acceso denegado

1.7. Leer un archivo y almacenarlo en tuplas

Crear una función leer_usuarios(ruta_fichero) que abra y lea un fichero como este
cuya ruta recibe por parámetro:

NOMBRE;APELLIDOS;EDAD
Daenerys;Targaryen;35
Jon;Nieve;32
Gregor;Clegane;55
Cersei;Lannister;40
Tyrion;Lannister;32
Sansa;Stark;18
Arya;Stark;16
Khal;Drogo;29
Joffrey;Baratheon;16
Petyr;Baelish;53
Sandor;Clegane;44
Ramsay;Bolton;33
Margaery;Tyrell;17

Matrices Página 4
y que devuelva un lista de tuplas. Cada tupla debe contener todos los campos separados
por punto y coma que hay en una línea del fichero, ignorando la primera línea ya que es una
cabecera. Siguiendo el ejemplo, la función devolvería el resultado así:

>>> usuarios = lee_usuarios(ruta\_fichero)

>>> print(usuarios)
[(’Daenerys’,’Targaryen’,35), (’Jon’,’Nieve’,32), ...]

1.8. Extraer fechas de un archivo

En el siguiente archivo se encuentran una serie de fechas (una fecha por línea):

11 nov 2021
10 oct 2017
31 ago 2005
12 feb 2011
18 mar 2000
17 mar 2000
7 dic 2005
13 nov 2021

Escibe un programa que reciba un fichero como este por argumento y que imprima por pan-
talla cuál es la fecha más antigua y la más reciente. Para el archivo de ejemplo:

$ python extraer_listas.py fechas.txt


La fecha más antigua es el 17 mar 2000
La fecha más reciente es el 13 nov 2021

Matrices Página 5

También podría gustarte