Python
TIC II
Archivos
Archivos & ficheros
Un archivo es una secuencia de bytes asociados a un
nombre
almacenados
en
un
dispositivo
de
almacenamiento no volátil como un disco duro o un
dispositivo USB.
Los archivos pueden ser:
› Texto
› Binarios
Los archivos de texto se pueden leer directamente con un
editor de textos, los archivos binarios necesitan de un
programa específico que interprete los datos.
Acceso a un archivo
Cada archivo tiene una ruta o camino que nos permite localizarlo.
Ruta absoluta: Se parte del directorio raíz y se recorren todos los
subdirectorios hasta llegar al archivo.
Ejemplo: C:\Documentos\Computación\TIC-II\archivo.txt
Ruta relativa: El programa PyCharm y otros IDEs utilizan un directorio de
trabajo (en el que guarda por defecto los trabajos).
Ejemplo: si el programa tiene como directorio de trabajo Computación la
ruta del archivo del ejemplo anterior es: TIC-II\archivo.txt
Determinación del directorio de trabajo en
Python
La forma de hacerlo es:
import os # utilizamos el modulo os, haz clic en os
para saber más
os.getcwd() # obtenemos el directorio de trabajo como
una cadena de texto
En mi caso
'C:\\Users\\Dep_Tec\\Documents\\Projects_Python’
¿Investiga cuál es tu directorio de trabajo?
También podemos cambiar de directorio haciendo:
import os
# utilizamos el modulo os
os.chdir('nueva ruta')
Operaciones con ficheros
Las operaciones a realizar serán:
› Leer o escribir
› Cerrar
El tipo de operación se indica en el momento de establecer el enlace con
el fichero.
enlace= open('nombre_completo', [modo='modo'],
[encoding='tipo_codificación'])
modo
Operación
r
Lectura, valor por defecto
r+
Lectura/Escritura
w
Sobreescritura. Si no existe el archivo se creará
a
Añadir. Escribe al final del archivo
Lectura de un archivo de texto
Crea un archivo de texto con el block de notas cuyo contenido sea el
mostrado a continuación y guárdalo con el nombre archivo_00.txt y
colócalo en tu directorio de trabajo:
Esto es un archivo de texto
Una línea
Dos líneas
Has pasado por una línea en blanco
FIN
Escribe en la consola el código siguiente:
>>> fichero = open('archivo_00.txt')
>>> texto = fichero.read()
>>> fichero.close() # Después de usar cerrar
>>> print(texto)
Lectura archivos
En el ejemplo anterior has obtenido en un variable TODO el texto.
Para obtener CADA LÍNEA :
>>> fichero = open('archivo_00.txt')
>>> linea1 = fichero.readline() # readline lee línea por línea
>>> print(linea1)
>>> linea2 = fichero.readline()
>>> linea3 = fichero.readline()
>>> linea4 = fichero.readline()
>>> linea5 = fichero.readline()
>>> linea6 = fichero.readline()
>>> print(linea6)
>>> linea7 = fichero.readline()
>>> print(linea7)
>>> fichero.close() # Después de usar cerrar
¿Qué aparece en linea7?
Lectura archivos V2
Lectura de cada línea
>>> fichero = open('archivo_00.txt')
>>> for linea in fichero:
print(linea)
>>> fichero.close() # Después de usar cerrar
Creación de una lista con todas las líneas del texto
>>> fichero = open('archivo_00.txt')
>>> texto= fichero.readlines()
>>> fichero.close() # Después de usar cerrar
>>> print(texto)
>>> texto // ¿qué obtienes?
NOTA: El final de un archivo se representa con una cadena vacía
Escribir en un fichero
La forma de hacerlo:
fichero = open('nombre_archivo', 'w')
fichero.write(texto)
fichero.close()
Ejemplo: Se crea un archivo desde la consola
>>> fichero = open('archivo_01.txt', 'w')
>>> fichero.write('Línea 1\nLínea 2')
>>> fichero.close()
NOTA 1: Los saltos de línea deben ser introducidos en la cadena a escribir
NOTA 2: Si el archivo no existe se crea.
NOTA 3: Si el archivo ya existe se sobreescribe su contenido
Escribir en un fichero usando una lista
La forma de hacerlo, las líneas a escribir se sitúan en una lista:
fichero = open('nombre_archivo', 'w')
fichero.writelines([linea1, linea2, linea3,… ])
fichero.close()
Ejemplo: Se crea un archivo desde la consola
>>> fichero = open('archivo_01.txt', 'w')
>>> fichero.writelines(['Línea 1\n', 'Línea 2', 'Línea 3')
>>> fichero.close()
Observa el fichero y extrae consecuencias
NOTA 1: Los saltos de línea deben ser introducidos en la cadena a escribir.
NOTA 2: Si el archivo no existe se crea.
NOTA 3: Si el archivo ya existe se sobreescribe su contenido.
Escribir al final de un fichero, modo append ‘a’
La forma de hacerlo:
fichero = open('nombre_archivo', 'a')
fichero.writelines([linea1, linea2, linea3,… ])
fichero.write(texto)
fichero.close()
Ejemplo: Se crea un archivo desde la consola
>>> fichero = open('archivo_01.txt', 'a')
>>> fichero.writelines(['Línea 4\n', 'Línea 5\n', 'Línea 6')
>>> fichero.close()
Observa el uso del modo de apertura y los saltos de línea.
NOTA: Si el fichero no existe se crea.
Otra forma de manejar archivos
with open(Nombre_archivo, operacion) as
manipuldor_archivo :
… operaciones a relizar sobre manipulador_archivo
Ejemplo: Escritura en el archivo nuevo_texto.txt
with open ("nuevo_texto.txt", "w") as archivo:
archivo.writelines(["Enhorabuena.\n","Has creado un archivo de
forma segura."])
La razón de usar este método es que no tenemos que cerrar el
archivo.
Tarea 1: Cambio a mayúsculas
Crea un fichero de nombre cambiar_a_mayúsculas.py.
Crea un programa que lea el archivo ‘nombres.txt’ y pase a
mayúsculas la primera letra de cada apellido y nombre, el
archivo con los nombres correctos se llamará
‘nombres.txt’.
En el programa utiliza comentarios para explicar lo qué
haces.
Tarea 2: Pacientes
Los datos de una clínica sobre sus pacientes son:
Nombre edad Diabetico
Daniel 42 si
Jose 15 Si
Manolo 50 No
Alicia 12 No
Juan 45 SI
Miguel 32 No
Ana 45 Si
Paula 18 NO
Andres 22 No
Los datos anteriores, que pueden ser cientos, están contenidos en un archivo de texto de
nombre pacientes_diabéticos.txt que tendrás que crear previamente.
La clínica necesita crear un programa buscar_diabeticos para buscar a aquellos enfermos
de una edad igual o superior a 25 que sean diabético. Una vez encontrados crear un
fichero de texto con el nombre pacientes_diabeticos_mas_25_annos que contenga sus
nombres y edades. Utilizad las funciones necesarias para que el programa sea reutilizable.
Posible solución pacientes
Una primera aproximación podría ser la siguiente.
Supondremos que ya tenemos el fichero pacientes creado (fichero_entrada).
Leer fichero_entrada
Crear fichero_salida
Para cada dato de una línea del fichero_entrada hacer
Si es diabético y edad >=25 entonces
Añadir dato al fichero_salida
Sino
No hacer nada
Cerrar todos los ficheros
Después deberás comprobar que en el fichero_salida están los datos de los pacientes
que cumplen los criterios establecidos.
Tarea 3: Contar frecuencias
Crea un fichero de nombre contar_palabras.py. Crea un programa que
lea el archivo ‘Cap_01_VCT.txt’ que cuente el número de veces que
aparece cada palabra. El resultado debe mostrarse en un fichero de
texto de nombre ‘frecuencias.csv’, el formato debe ser:
palabra, numero_apariciones
Después ábrelo con una hoja de calculo y …
NOTA 1: Se deben descartar los signos de puntuación (,;:, etc.)
NOTA 2: Utiliza las funciones que has creado al trabajar con cadenas
de caracteres.
En el programa utiliza comentarios para explicar lo qué haces.
Tarea 4: Sudoku (reglas)
Crea un fichero de nombre sudoku.py. Crea un programa
que lea el archivo que contiene un Sudoku con todas las
casillas llenas, determine si es legal o no y, en cualquier
caso, que añada una línea al final de ese archivo que
indique si la solución es LEGAL o ILEGAL según cumpla o
no las normas del Sudoku.
Archivos para comprobar:
sudoku_1.txt
sudoku_2.txt
Antes de empezar a escribir el código piensa.
En el programa utiliza comentarios para explicar lo qué
haces.
Posible solución Sudoku
Un primer nivel de abstracción podría ser el siguiente:
Leer el fichero
Crear el tablero_sudoku
Para cada fila del tablero comprobar sus regla_filas
Para cada columna del tablero comprobar sus regla_columnas
Para cada submatriz comprobar sus regla_submatrices
Si regla_filas y regla_columnas y reglas_subamtrices ciertas
devolver sudoku Legal
sino
devolver sudoku Ilegal
Cada una de las partes anteriores se puede descomponer más si es necesario.
Tarea 5: PI (opcional)
Abre el archivo ‘pi.txt’ que contiene miles de cifras del
numero PI. Haciendo agrupaciones de dos dígitos
comprueba si algunas de ellas tienen una frecuencia
mayor que otras.
Crea un archivo de nombre ‘frecuencia_pi.txt’ donde se
indique la frecuencia de cada aparición en el formato:
Numero, apariciones