#Escribe un archivoLa salida y el contenido del archivo prueba.txt son:
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,
Este texto va para el archivo de salidaObserve que escribió un archivo llamado prueba.txt en el directorio desde el cual ejecutó el programa. El
Vea el archivo y compruebel
\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:
open
.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]
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'
lista_telefonos = {}Observe que ahora incluye guardar y cargar archivos. Aquí tiene la salida de las dos veces que lo ejecuté:
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"
> 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
.
Ahora modifique el programa de calificaciones de la sección 11 para que escriba y lea archivos que contengan los registros de los estudiantes.