next up previous contents
Siguiente: Manejo de la imperfección Arriba: Tutor de Python para No-programadores Anterior: La venganza de las hileras   Contenido

Subsecciones

Lectura y escritura de archivos

Aquí tiene un ejemplo sencillo de lectura y escritura de archivos:
#Escribe un archivo
archivo_salida = open("prueba.txt","w")
archivo_salida.write("Este texto va para el archivo de salida\nVea el archivo y compruebelo\n")
archivo_salida.close()

#Lee un archivo
archivo_entrada = open("prueba.txt","r")
texto = archivo_entrada.read()
archivo_entrada.close()

print texto,
La salida y el contenido del archivo prueba.txt son:
Este texto va para el archivo de salida
Vea el archivo y compruebel
Observe que escribió un archivo llamado prueba.txt en el directorio desde el cual ejecutó el programa.  El \n en la hilera le dice a Python que introduzca un retorno de carro en su lugar (nuevo renglón).

Una vista rápida de lectura y escritura de archivos es:

  1. Cree un objeto de archivo con la función open.
  2. Lea o escriba al objeto de archivo (dependiendo de cómo lo abrió)
  3. Ciérrelo

El primer paso es obtener un objeto de archivo.  Para hacer esto usamos la función open.  El formato es objeto_archivo = open(nombrearchivo,modo) donde objeto_archivo es la variable para poner el objeto archivo, nombrearchivo es una hilera con el nombre del archivo, y modo es ya sea "r" para leer un archivo o "w" para escribir en un archivo.  Luego podemos llamar las funciones de los objetos de archivo.  Las dos más comunes son read y write.  La función write añade una hilera al final del archivo.  La función read lee la siguiente cosa en el archivo y la devuelve como una hilera.  Si no proporcionamos argumentos, devolverá todo el contenido del archivo (tal como en el ejemplo).

Ahora veamos una nueva versión del programa de números telefónicos que hicimos anteriormente:

import string

verdadero = 1
falso = 0

def imprimir_numeros(numeros):
print "Numeros telefonicos:"
for x in numeros.keys():
print "Nombre: ",x," \tNumero: ",numeros[x]
print

def agregar_numero(numeros,nombre,numero):
numeros[nombre] = numero

def buscar_numero(numeros,nombre):
if numeros.has_key(nombre):
return "El numero es "+numeros[nombre]
else:
return "No pude hallar a "+nombre

def eliminar_numero(numeros,nombre):
if numeros.has_key(nombre):
del numeros[nombre]
else:
print "No pude hallar a ", nombre


def cargar_numeros(numeros,nombrearchivo):
archivo_entrada = open(nombrearchivo,"r")
while verdadero:
renglon_entrada = archivo_entrada.readline()
if renglon_entrada == "":
break
renglon_entrada = renglon_entrada[:-1]
[nombre,numero] = string.split(renglon_entrada,",")
numeros[nombre] = numero
archivo_entrada.close()

def guardar_numeros(numeros,nombrearchivo):
archivo_salida = open(nombrearchivo,"w")
for x in numeros.keys():
archivo_salida.write(x+","+numeros[x]+"\n")
archivo_salida.close()


def imprimir_menu():
print '1. Imprimir numeros telefonicos'
print '2. Agregar numero telefonico'
print '3. Borrar numero telefonico'
print '4. Buscar numero telefonico'
print '5. Cargar numeros'
print '6. Guardar numeros'
print '7. Cerrar el programa'
print
lista_telefonos = {}
seleccion_menu = 0
imprimir_menu()
while seleccion_menu != 7:
seleccion_menu = input("Escriba su seleccion (1-7):")
if seleccion_menu == 1:
imprimir_numeros(lista_telefonos)
elif seleccion_menu == 2:
print "Agregue nombre y numero"
nombre = raw_input("Nombre:")
telefono = raw_input("Numero:")
agregar_numero(lista_telefonos,nombre,telefono)
elif seleccion_menu == 3:
print "Borrar nombre y numero"
nombre = raw_input("Nombre:")
borrar_numero(lista_telefonos,nombre)
elif seleccion_menu == 4:
print "Buscar numero"
nombre = raw_input("Nombre:")
print buscar_numero(lista_telefonos,nombre)
elif seleccion_menu == 5:
nombrearchivo = raw_input("Archivo para cargar:")
cargar_numeros(lista_telefonos,nombrearchivo)
elif seleccion_menu == 6:
nombrearchivo = raw_input("Archivo en el cual guardar:")
guardar_numeros(lista_telefonos,nombrearchivo)
elif seleccion_menu == 7:
pass
else:
imprimir_menu()
print "Adios"
Observe que ahora incluye guardar y cargar archivos.  Aquí tiene la salida de las dos veces que lo ejecuté:
> python telefonos2.py
1. Imprimir numeros telefonicos
2. Agregar numero telefonico
3. Borrar numero telefonico
4. Buscar numero telefonico
5. Cargar numeros
6. Guardar numeros
7. Cerrar el programa

Escriba su seleccion (1-7):2
Agregue nombre y numero
Nombre:Juana
Numero:1234
Escriba su seleccion (1-7):2
Agregue nombre y numero
Nombre:Pedro
Numero:4321
Escriba su seleccion (1-7):1
Numeros telefonicos:
Nombre: Pedro Numero: 4321
Nombre: Juana Numero: 1234

Escriba su seleccion (1-7):6
Archivo en el cual guardar:numeros.txt
Escriba su seleccion (1-7):7
Adios

> python telefonos2.py
1. Imprimir numeros telefonicos
2. Agregar numero telefonico
3. Borrar numero telefonico
4. Buscar numero telefonico
5. Cargar numeros
6. Guardar numeros
7. Cerrar el programa

Escriba su seleccion (1-7):5
Archivo para cargar:numeros.txt
Escriba su seleccion (1-7):1
Numeros telefonicos:
Nombre: Pedro Numero: 4321
Nombre: Juana Numero: 1234

Escriba su seleccion (1-7):7
Adios

Las nuevas porciones de este programa son:

def cargar_numeros(numeros,nombrearchivo):
archivo_entrada = open(nombrearchivo,"r")
while verdadero:
renglon_entrada = archivo_entrada.readline()
if renglon_entrada == "":
break
renglon_entrada = renglon_entrada[:-1]
[nombre,numero] = string.split(renglon_entrada,",")
numeros[nombre] = numero
archivo_entrada.close()

def guardar_numeros(numeros,nombrearchivo):
archivo_salida = open(nombrearchivo,"w")
for x in numeros.keys():
archivo_salida.write(x+","+numeros[x]+"\n")
archivo_salida.close()

Veamos la porción para guardar números.  Primero crea un objeto archivo con la función open(nombrearchivo,"w").  Luego lo recorre y crea un renglón para cada número telefónico con la función archivo_salida.write(x+","+numeros[x]+"\n").  Esto escribe un renglón que contiene el nombre, una coma, el número y empieza un renglón nuevo.

La porción de carga es un poco más complicada.  Empieza obteniendo el objeto archivo.  Entonces usa un rizo while 1: para mantenerse dentro del rizo hasta que encuentre un enunciado break.  Luego lee un renglón al ejecutar renglon_entrada = archivo_entrada.readline().  La función getline devolverá un una hilera vacía  (len(string) == 0) cuando llegue al final del archivo.  El enunciado if revisa si esto ha ocurrido y usa el break para salir del rizo cuando ha llegado al final del archivo.   Por supuesto que si la función readline no devolviera el retorno de carro al final del renglón, no habría modo de saber si una hilera vacía era un renglón vacío o el final del archivo así que el retorno de carro es conservado en lo que devuelve getline.  Por lo tanto, tenemos que deshacernos del retorno de carro.  El renglón en renglon_entrada = renglon_entrada[:-1] hace esto eliminando la última letra.  A continuación, el renglón[nombre,numero] = string.split(renglon_entrada,",")divide el renglón usando la coma como separador en un nombre y un número.  Este par es luego añadido al diccionario numeros.

Ejercicios

Ahora modifique el programa de calificaciones de la sección 11 para que escriba y lea archivos que contengan los registros de los estudiantes.


next up previous contents
Siguiente: Manejo de la imperfección Arriba: Tutor de Python para No-programadores Anterior: La venganza de las hileras   Contenido
Josh Cogliati jjc@honors.montana.edu
Traducido por Victor M. Rosas-Garcia quimico69@yahoo.com