archivos en disco: motivación

18
Archivos en disco: motivación Memoria (RAM) Disco tipo de memoria volátil (contenido se pierde) permanente (contenido se mantiene) velocidad rápida (~10 -6 segs) lenta (~ 10 -3 segs) tiempo acceso constante (a cualquier lugar) variable (depende de cercanía a cabezal)

Upload: cassidy-rosales

Post on 30-Dec-2015

21 views

Category:

Documents


2 download

DESCRIPTION

Archivos en disco: motivación. #contar lineas y caracteres de un archivo nl=0 #contador de líneas nc=0 #contador de caracteres a=open(raw_input("archivo?"),"r") while True: linea=a.readline() if linea=="": break; nl=nl+1 nc=nc+len(linea) a.close() print nl,"lineas" - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Archivos en disco: motivación

Archivos en disco: motivaciónMemoria (RAM) Disco

tipo de memoria

volátil (contenido se pierde)

permanente (contenido se mantiene)

velocidad rápida (~10-6 segs) lenta (~ 10-3 segs)

tiempo acceso

constante (a cualquier lugar)

variable (depende de cercanía a cabezal)

costo caro barato (~ 100 veces -)

capacidad limitada (máx 4G) mayor (máx 500G)

Page 2: Archivos en disco: motivación

Problema . Leer líneas que terminan con la palabra “fin” y grabarlas en un archivo en disco de nombre “lineas.txt”. #grabar lineas en archivo #abrir (preparar) archivo para escribir(grabar) a=open("lineas.txt","w") #leer lineas hasta “fin” while True: linea=raw_input("palabra(o fin)?") if linea=="fin": break #grabar linea en archivo a.write(linea+"\n") #cerrar archivo a.close()

Page 3: Archivos en disco: motivación

a=open("lineas.txt","w") a: objeto en memoria que representa al archivo (y contiene sus

principales características: ubicación, tamaño, cursor, etc) “lineas.txt”: nombre externo del archivo (en el disco).

El sufijo .txt se usa para archivos que contienen texto (caracteres).

“abre” (prepara, inicializa) archivo para escritura (“w”)

si archivo no existe, se crea, y si ya existe, se regraba ubica el cursor del archivo al comienzo del espacio asignado

(para grabación de información)

Page 4: Archivos en disco: motivación

a.write(linea+"\n") escribe (graba) una línea en el archivo

graba caracteres del string linea graba una marca de fin de línea (carácter especial newline o \n) ubica cursor después de newline

Ejemplo: a.write("hola\n") escribe en el archivo en disco: hola\n ^ (cursor de archivo)

Page 5: Archivos en disco: motivación

a.close() “cierra” el archivo

graba marca de fin de archivo (eof) libera recursos (memoria) asociada al objeto a archivo no se puede volver usar, salvo después de otro open

ejemplo: a.write(“chao\n”) a.close(); hola\nchao\n█ █ : marca de fin de archivo

Page 6: Archivos en disco: motivación

Problema. Mostrar el archivo “lineas.txt” #leer y mostrar lineas de archivo a=open("lineas.txt","r") #leer líneas hasta detectar fin de archivo while True: linea=a.readline() if linea=="": break; #mostrar linea print linea #cerrar archivo a.close()

Page 7: Archivos en disco: motivación

a=open("lineas.txt","r") a: objeto que representa al archivo “abre” (prepara, inicializa) archivo para lectura (“r”)

si archivo no existe, aborta si existe, ubica el cursor al comienzo del archivo

a.close() “cierra” el archivo si se omite, se cierra al terminar programa

Page 8: Archivos en disco: motivación

linea=a.readline() lee una línea del archivo

entrega un string con los caracteres de la línea (con newline) avanza cursor al comienzo de la línea siguiente

Ejemplo, si archivo contiene: hola\nchao\n█ primera vez se lee (y entrega) “hola\n” segunda vez se lee (y entrega) “chao\n” tercera vez detecta █ y entrega “” Nota. Dado que string contiene \n, el programa muestra: hola chao ¿Solución? print linea[0:len(linea)-1] o linea[0:-1] para no escribir último caracter

Page 9: Archivos en disco: motivación

Solución 2. Mostrar el archivo “lineas.txt” #leer y mostrar lineas de archivo a=open("lineas.txt","r") #leer todas las líneas del archivo for linea in a: #mostrar string (salvo último caracter) print linea[0:-1] #cerrar archivo a.close() ¿for linea in a:? lee todas las líneas del archivo en cada iteración, se lee una línea del archivo y se asigna a la variable de nombre linea

Page 10: Archivos en disco: motivación

Problema . Copiar un archivo en otro, obteniendo del usuario los nombres de los archivos Ejemplo: input?lineas.txt output?lineas1.txt #abrir archivos de entrada y salida a=open(raw_input("input?"),"r") b=open(raw_input("output?"),"w") #copiar todas las líneas del archivo for linea in a: b.write(linea) #cerrar archivos a.close() b.close()

Page 11: Archivos en disco: motivación

Problema . mostrar las líneas de un archivo que contengan un string Ejemplo de uso: String a buscar?Jose Archivo?nombres.txt Jose Manuel Maria Jose Josefina

Page 12: Archivos en disco: motivación

#mostrar lineas que contienen un string #obtener strings y abrir archivo s=raw_input("string a buscar?") a=open(raw_input("archivo?"),"r") #leer todas las líneas del archivo for linea in a: #mostrar lineas con string if s in linea: print linea[0:-1] #cerrar archivo a.close() Nota. s in linea equivale a linea.find(s)>=0

Page 13: Archivos en disco: motivación

Ejercicio. Contar las líneas y los caracteres de un archivo Diálogo? Nombre de archivo?... nº líneas nº caracteres

Page 14: Archivos en disco: motivación

#contar lineas y caracteres de un archivo

nl=0 #contador de líneas

nc=0 #contador de caracteres

a=open(raw_input("archivo?"),"r")

while True:

linea=a.readline()

if linea=="": break;

nl=nl+1

nc=nc+len(linea)

a.close()

print nl,"lineas"

print nc,"caracteres"

Page 15: Archivos en disco: motivación

#contar lineas y caracteres de un archivo

nl=0 #contador de líneas

nc=0 #contador de caracteres

a=open(raw_input("archivo?"),"r")

for linea in a:

nl=nl+1

for c in linea: nc=nc+1

a.close()

print nl,"lineas"

print nc,"caracteres"

Page 16: Archivos en disco: motivación

#contar lineas y caracteres de un archivonl=0 #contador de líneasnc=0 #contador de caracteresa=open(raw_input("archivo?"),"r")for linea in a: nl += 1 #nl=nl+1 nc += len(linea) #nc=nc+len(linea)a.close()print nl,"lineas"print nc,"caracteres"

Sintaxis: variable operador= expresión

Semántica: variable = variable operador (expresión)

Page 17: Archivos en disco: motivación

#contar lineas y caracteres de un archivoa=open(raw_input("archivo?"),"r")s="" #string para concatenar lineasfor linea in a: s += linea #s=s+lineaa.close()print s.count("\n"),"lineas"print len(s),"caracteres“

Nota. aplicable a archivos que caben en memoria

Page 18: Archivos en disco: motivación

#contar lineas y caracteres de un archivoa=open(raw_input("archivo?"),"r")s = a.read()a.close()print s.count(“\n”),"lineas"print len(s),"caracteres“

¿a.read()?

• lee y entrega todos los caracteres del archivo