¡Descarga Apunte de Archivos Python y más Esquemas y mapas conceptuales en PDF de Programación Informática solo en Docsity!
Universidad de Santiago de Chile Departamento de Ingeniería Informática Fundamentos de la Computación y la Programación
Archivos
Apuntes versión 1.
Víctor Araya Sánchez
Objetivos de este apunte
Al terminar de leer, hacer los ejercicios propuestos de este apunte y trabajar en clases serás capaz
de:
Leer información alojada en archivos de texto plano a través de programas desarrollados en el
lenguaje de Programación Python.
Almacenar información en archivos de texto plano, resguardado criterios de orden y buenas
prácticas, a través de programas desarrollados en el lenguaje de Programación Python.
1. Introducción
El presente apunte tiene como finalidad presentar las principales formas de manipular archivos
de texto planos.
Para comenzar es bueno saber qué es un archivo y conocer qué de qué tipos de archivo existen.
En esta ocasión nos fijaremos en la quinta acepción, propia de la informática. Desde esta pers-
pectiva un archivo corresponde a una agrupación de datos, de distintos tipos, organizados bajo una
1 INTRODUCCIÓN
Figura 1: Esto es un ejemplo de un archivo de texto plano, abierto en Notepad++
etiqueta o nombre que lo identifica.
Hay distintas formas de clasificar archivos, por ejemplo, por el software que los utiliza (que po-
dría ser equivalente a la clasificación por extensión del archivo), por el tiempo de información que
contiene, por la finalidad que cumple, entre otras posibilidades.
En particular nos preocuparemos por abordar un tipo particular de archivo: los archivos de tex-
to plano. Estos archivos almacenan información en forma de caracteres legibles para el ser humano,
sin inclusión de elementos de formato estético o de orden adicional (como fuentes en negrita, itáli-
ca, alineación de texto, entre otros), sin elementos multimediales (como enlaces, imágenes, audios,
videos) ni ninguna otra incorporación especial.
Es regular que los archivos de texto plano se almacenen con extensión .txt, pero eso no significa
que sea la única extensión posible. Un ejemplo concreto de ello son los archivo .py, los cuales son
scripts (o programas) escritos en Python que corresponden también a texto plano. De igual forma
archivos con extensión .xml, .html y muchos otros.
En particular, estos últimos dos tipos específicos de archivos de texto plano codifican la infor-
mación en modo de etiquetas (palabras o frases encerradas en <>), y se utilizan para el intercambio
de información entre sistemas.
A lo largo de este apunte haremos énfasis en algunas tareas específicas que se pueden realizar
con archivos, particularmente:
Abrir y cerrar un archivo
Leer un archivo
Escribir en un archivo nuevo
Añadir información a un archivo existente
3 RUTAS DE ARCHIVO
Para nombrar al archivo .csv^1 al querer abrirlo, desde nuestro programa, existen dos formas de
hacerlo; a través del path absoluto y a través del path relativo.
El path absoluto corresponde a la ruta absoluta, textual y completamente detallada en la que se
encuentra el archivo. En el ejemplo, la carpeta proyecto está en la carpeta de usuario, por ende, su
ruta o path absoluto es C:/Users/Usuario/Proyecto/Reclamos_2010_Data Set.csv^2. Como notarás,
la ruta parte desde la letra de la unidad en que se ubica el documento, pasando por cada carpeta
en la que se aloja, hasta llegar al nombre mismo del archivo. Esta forma de nombrar archivos o
directorios (carpetas) es muy precisa, no obstante, es extensa y puede ser muy compleja de trabajar
cuando se trabaja en dispositivos extraíbles como pendrives.
El path relativo, como su nombre lo indica, describe la posición de un archivo respecto a la
posición en que me encuentro actualmente. En nuestro ejemplo la ruta o path relativo de nuestro
archivo .csv es ./Reclamos_2010_Data Set.csv , donde. simboliza la carpeta actual. Si dentro de la
carpeta Proyecto hubiera una carpeta Documentos y en su interior estuviera el archivo csv, enton-
ces la ruta sería ./Documentos/Reclamos_2010_Data Set.csv. Es importante aclara que la carpeta
desde donde se hace la referencia es la que aloja el script o programa, en nuestro caso la carpeta
Proyecto.
(^1) Es importante notar que, a pesar que un archivo .csv se visualiza como disponible para abrir con Microsoft Excel, en esencia es un archivo de texto plano. Para verificarlo puedes dar botón secundario sobre él y utilizar la opción abrir con del menú contextual, escogiendo abrir con Block de notas o Notepad según el idioma en que esté tu sistema operativo. ¿Qué pasa si haces el mismo con un archivo con extensión .xls o .xlsx? ( Precaución: Desmarca la casilla que dice “Usar siempre esta aplicación para abrir los archivos... ”, de lo contrario tus archivos de Microsoft Excel seguirán abriéndose siempre con block de notas). (^2) Al revisar la ruta desde el explorador de Microsoft Windows notarás que se usa \ en vez de /, por lo que es necesario hacer el cambio para que
Python lo interprete apropiadamente.
4 LECTURA DE ARCHIVOS
Ejemplo
Si quisiéramos abrir el documento Reclamos_2010_Data Set.csv en modo lectura
escribiremos:
archivo = open ("C:/Users/Usuario/Proyecto/Reclamos_2010_Data Set. csv", "r")
Actividad
Escribe la instrucción para abrir el mismo documento anterior, usando su path
relativo en modo de “agregar”.
Cada vez que uno ingresa a una sala, oficina, edificio u otra infraestructura que tenga una puerta
que debe abrirse para entrar, las normas de buena educación señalan que luego de abrir la puerta y
entrar al recinto, la puerta debe ser cerrada. Te sugerimos fuertemente que recuerdes esto cada vez
que ingrese a un edificio, sobre todo cuando esté calefaccionado y en invierno. Este comentario no
es solo para recordar una norma de buena educación, sino que hace referencia a las buenas prácticas
en la programación, en este caso, cada vez que abras un archivo y lo uses debes cerrarlo.
Para cerrar un archivo que fue abierto asociándolo a la variable archivo, debes cerrarlo así:
archivo.close()
El cerrar un archivo luego de usarlo no solo responde a una buena práctica, sino que es cru-
cial para el buen funcionamiento de nuestros programas y del equipo en que estés trabajando. Por
ejemplo, supón que estás trabajando con un archivo alojado en tu pendrive con un programa que
no cierra el archivo al termina de usarlo. A pesar que el programa termine su ejecución, para el sis-
tema operativo el archivo seguirá en uso, por lo que no te dejará sacar el pendrive de manera segura.
Otro punto importante, antes de continuar, es que recuerdes usar el archivo antes de cerrarlo,
ya sea leyéndolo o escribiendo sobre él, de lo contrario no podrás manipular la información que
contiene.
4. Lectura de archivos
Mientras el documento está abierto es posible leer su contenido, siempre y cuando el modo de
apertura haya sido “r”.
4 LECTURA DE ARCHIVOS
Ejemplo
En el siguiente ejemplo calcularemos la cantidad de reclamos efectuados al SER-
NAC por región durante el año 2010. Los datos puedes obtenerlos desde:
http://datos.gob.cl/dataset/3162.
#!/usr/bin/env python #-- coding: cp1252 --
Verificar la cantidad de reclamos por región
def abrirArchivo (nombre): archivo = open (nombre, "r") listadoInformacion = [] for linea in archivo: linea = linea.strip().split(";") listadoInformacion.append(linea) archivo.close() return listadoInformacion
def verificarRegiones (datos): regionesParticipantes = [] for linea in datos: region = linea[2] if region not in regionesParticipantes: regionesParticipantes.append(region) else : pass regionesParticipantes = regionesParticipantes[1: len ( regionesParticipantes)] return regionesParticipantes
def contarReclamos (datos, regiones): reclamos = [] for region in regiones: conteo = 0 for linea in datos: if region == linea[2]: conteo += 1 else : pass reclamos.append(conteo) return reclamos
datos2010 = abrirArchivo("./Reclamos_2010_Data Set.csv") regionesParticipantes = verificarRegiones(datos2010) totalesReclamos = contarReclamos(datos2010, regionesParticipantes ) print regionesParticipantes print totalesReclamos
5 ESCRITURA DE ARCHIVOS
Actividad
Comenta el código siguiendo las buenas prácticas que hemos descrito hasta aho-
ra.
¿Qué hacen los métodos .strip(), .slipt() y .join()?
Ejercicio Propuesto
Chile es un país con alta actividad sísmica, por lo que manejar información de
este tipo es de gran importancia. Se te ha solicitado estimar el promedio anual y
mensual (de cada año) de magnitudes de sismos desde 2003 a 2015 a través de un
programa desarrollado en Python. Para realizar dicha tarea han puesto a tu dis-
posición el documento alojado en: http://benjad.github.io/2015/08/21/base-de-
datos-sismos-chile/.
Desarrolla un script en Python que muestre por pantalla la información soli-
citada permitiendo que el usuario decida el año y/o mes del que quiere saber el
promedio de magnitud.
5. Escritura de archivos
Supongamos ahora que nuestra misión es escribir información a un archivo. Mientras el docu-
mento está abierto es posible escribir sobre él o agregar contenido, siempre y cuando el modo de
apertura haya sido "w" o .a".
Para realizar la escritura puedes utilizar alguno de los métodos que siguen, considerando que
el archivo esté asociado a la variable documento:
documento.write(“texto”) – De esta manera se escribe en el archivo objetivo a partir
desde el último lugar que se escribiera en él. Si se habrío en modo "w" la primera escritura
será como si el archivo estuviera en blando, si fue abierto en modo .a", la escritura comenzará
a partir de la posición siguiente al último carácter existente en el archivo. Su argumento debe
ser un string.
A diferencia de la lectura, con la escritura no se hace la asignación a una variable, sino que la
instrucción se da por sí sola, dado que su fin no es acceder a la información, sino dirigir la informa-
ción hacia un archivo.
5 ESCRITURA DE ARCHIVOS
reclamos.append(conteo) return reclamos
def guardarInformacion (archivo, regiones, cantidades): nuevoDocumento = open (archivo, "w") contador = 0 while contador < len (regiones): regionFrecuencia = "La región " + regiones[contador] + " tuvo un total de " + str (cantidades[contador]) + " de reclamos durante el año 2010.\n" nuevoDocumento.write(regionFrecuencia) contador += 1 nuevoDocumento.close() return True
datos2010 = abrirArchivo(".\Reclamos_2010_Data Set.csv") regionesParticipantes = verificarRegiones(datos2010) totalesReclamos = contarReclamos(datos2010, regionesParticipantes ) print regionesParticipantes print totalesReclamos guardarInformacion("./Información de reclamos.txt", regionesParticipantes, totalesReclamos)
Actividad
Incluye los comentarios necesarios en los nuevos tramos de código de nuestro
programa.
Ejercicio Propuesto
Se te solicita que el programa que estima los promedios de sismos incluya tres
nuevas funcionalidades:
El programa debe detectar el sismo de mayor magnitud en el tramo escogido
por el usuario.
El programa debe detectar el sismo de menor magnitud en el tramo escogido
por el usuario.
El programa debe imprimir la información calculada en un archivo de texto
con la siguiente estructura:
5 ESCRITURA DE ARCHIVOS
“En el del la magnitud promedio de los sismos producidos fue
de .
El sismo de mayor intensidad fue de y el de menor inten-
sidad fue de .”
Modifica tu script del ejercicio propuesto anterior para cumplir con los nuevos
requerimientos.