Archivos

Transcripción

Archivos
01/11/2016
Capitulo 3.
manejo de archivos
¿Qué un archivo?
Un archivo es una colección de datos que se
almacenan en memoria secundaria (disco duro o
una USB por ejemplo), lo que implica que el
acceso es muy lento, por ello se establece una
conexión entre el archivo y el programa para
mover datos entre los dos, esta conexión se
realiza en Python con open(). Es decir se crea
como un puntero (índice al archivo/objeto a
archivo/flujo).
Cada vez que se requiera leer/escribir archivos se
debe conocer el formato (como se guarda) la
información del archivo. Por ejemplo un número
por línea, el archivo sigue el formato de word, etc
1
01/11/2016
Tipos de archivos
En general existen 2 tipos de archivos:
• Archivos de texto: archivos donde normalmente
el espacio y nueva línea(“\n") son caracteres
de control, generalmente legibles para humanos
• Archivos de binarios: archivos donde toda la
información esta en lenguaje máquina (0’s y 1’s)
para ser entendida directamente por la
máquina, por lo cual no son legibles por
humanos.
• ¿Cuantos bytes tiene el siguiente archivo?
Que necesitamos para trabajarlos
Para trabajar archivo con Python se necesita conocer:
• Ruta (camino) – PATH – ubicación en sistema de
archivos. (carpeta donde está el archivo ubicado)
• Nombre (que lo diferencia de los demás archivos)
• Extensión - Según la extensión el SO asocia una
aplicación p.eg .doc se asocia word, .xls se asocia
excel.
• Según la extensión y/o la información del creador
del archivo debemos conocer la forma de guardar la
información (formato) tanto si el archivo es binario
como modo texto
• Modos de acceso para abrir el archivo: “r” (lectura),
“w” (escritura), “a” (Adición al final del archivo)
2
01/11/2016
Modos y carácter de nueva de línea
Cuidado con los modos de escritura
• Tenga cuidado si se abre un archivo con el modo
'w' , porque ocasiona la destrucción de los datos
existentes.
• El modo "a" es más bonito, que le permite
escribir en el final de un archivo existente sin
cambiar el contenido existente!!
3
01/11/2016
Que debemos saber
• Todo acceso de lectura(r) o escritura(w) en un
archivo de texto se realiza mediante
cadenas(string)
– todo lo que lee es una cadena
– si se escribe en un archivo, sólo se puede escribir una
cadena
• Todo acceso de lectura/escritura (R/W) desplaza
el flujo o puntero a archivo.
• A través de un ciclo for se puede recolectar
información del archivo previamente abierto en
modo lectura una línea a la vez.
Pasos para trabajar con archivos
1. Conocer la ruta, nombre, extensión del archivo y
modo.
2. Abrir el archivo con open() (Aquí se crea el
flujo/objeto a un archivo)
3. Leer/escribir (R/W) el archivo mediante el flujo
creado en el paso 2. Recuerde que aquí el flujo
se desplaza.
4. Cerrar el archivo con el método .close()
4
01/11/2016
Creando el flujo
my_file = open("archivo.txt", "r")
my_file es el flujo/objeto a archivo. La función
open() establece una conexión entre el archivo en
disco y nuestro programa para mover datos entre
los dos. Como se ve tiene dos argumentos que este
caso ambos son cadenas. El primer argumento es el
nombre del archivo en disco, el segundo es el
modo en que se trabajará el archivo (recuerde
aquí,"r" significa modo lectura)
¿Donde esta el archivo en disco?
• Cuando se crea el flujo/objeto a archivo, el
nombre del archivo puede venir en una de dos
formas:
• "archivo.txt" asume que el nombre del
archivo es archivo.txt y se encuentra en el mismo
directorio donde se encuentra nuestro programa
(módulo de python)
• "C:\proyecto\archivo.txt"
es
el
nombre de archivo completo e incluye la
información de la ruta del archivo(PATH).
5
01/11/2016
close
Cuando el programa ha terminado con un archivo,
cerramos el archivo con close
• close elimina la conexión con el archivo
• close es un método de un objeto a
archivo/flujo:
file_obj.close ()
• Todos los archivos deben ser cerrados!!!
leer (R)
• my_file.read() Lee todo el contenido del
archivo como una cadena y lo devuelve. Se
puede tomar un número entero N como
argumento opcional para limitar la lectura de N
bytes
• my_file.readline() Retorna/Entrega la
siguiente línea como un string
• my_file.readlines() # note plural
Retorna una lista de todas las líneas del archivo
6
01/11/2016
Ejemplo de archivos
Suponga que tenemos un archivo llamado
temp.txt el cual tiene el siguiente contenido
Primera Linea
Segunda Linea
Tercera Linea
Cuarta Linea
7
01/11/2016
8
01/11/2016
Escribir (w)
• Una vez el archivo es abierto en el modo
apropiado, podemos escribir en el archivo:
• my_file.write(s)Escribe la cadena s en el
archivo
• my_file.writelines(lst) # note plural
Escribe una lista de string (una al tiempo) en el
archivo. En este caso la lista se llama lst
• Usando print: se adiciona file=flujo como
argumento al print. En este caso sería agregar al
print file=my_file
Escribir (forma 1)
9
01/11/2016
Escribir (forma 2)
Interrogantes
• ¿Cómo podemos identificar la ruta (PATH) o
directorio actual de trabajo en namespace?
• ¿Cómo podemos identificar en que posición de
archivo se encuentra el flujo/objeto a archivo?
• ¿Cómo podemos identificar una situación
excepcional, como los errores que se producen
al leer un archivo que no existe? Existe algún
método para ello?
10
01/11/2016
Recordemos
• Cada read / readline / readlines / write / writelines
/ print(..,file=my_file) mueve la posición actual
hacia delante
• Cuando llegue al final, cada lectura sólo se
producirá '' (cadena vacía), ya que está al final
• No hay indicación de final de archivo de esta manera!
• Es obvio que para leer/escribir en el archivo,
primero se debe ubicar el flujo/objeto a archivo en
el lugar adecuado. Por ejemplo si se requiere leer
nuevamente el archivo se debe volver al principio
del archivo.
Módulo OS
• El módulo os en Python es una interfaz entre el
sistema operativo y el lenguaje Python.
• Como tal, tiene muchos sub-funcionalidades
relacionadas con diversos aspectos.
• Vamos a ver solo la parte relacionada con un
archivo
11
01/11/2016
Algunos comandos del OS
• os.getcwd() Retorna el PATH completo del
directorio actual de trabajo (current working
directory)
• os.chdir(path_str) Cambia el directorio
actual de trabajo al PATH dado en la cadena
path_str
• os.listdir(path_str) Retorna la lista de
archivos y directories del PATH actual (incluye '.')
• os.path.isfile(path_str) retorna True
o False si el achivo en path_str existe
La posición actual en el archivo
• Cada archivo mantiene una posición actual en el
archivo.
• Indica lo que se leerá en el archivo a
continuación.
• Cuando se abre el archivo en el disco, el
contenido del archivo se copia en el búfer del
objeto de archivo
• Piense en el objeto de archivo como una lista
muy grande, donde cada índice es uno de los
bytes que compone el archivo
• La posición actual es el índice actual en esa lista
12
01/11/2016
Otros métodos para trabajar archivos
• tell() Retorna la posición actual en el
archivo contado desde el inicio del archivo
(Primer byte del archivo)
my_file.tell() => 42L
• seek() Actualiza/cambia la posición actual
del archivo a un nuevo índice del archivo (en
bytes de desplazamiento desde el principio del
archivo)
fd.seek(0) # mueve el flujo al principio del archivo
fd.seek(100) # 100 bytes desde el principio
13
01/11/2016
Argumentos opcionales de seek
• seek() tiene un conjunto de argumentos
opcionales:
0: cuenta desde el principio
1: cuenta desde la posición actual del archivo
2: cuenta desde el final (hacia atrás)
Ejemplo de los métodos tell() y
seek()
14
01/11/2016
Manejo de excepciones en Python
try-except suite para detectar errores:
try:
suite a observar
except ErrorParticular
error suite
Tipos de excepciones/errores a
identificar
Nombres de
error
>>> 100/0
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
100/0
ZeroDivisionError: integer division or modulo by zero
>>> open('temp.txt')
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
open('badFileName')
FileNotFoundError: [Errno 2] No such file or directory: 'temp.txt'
15
01/11/2016
Ejemplo de Manejo de excepciones
try:
in_file=open(“temp.txt”,”r”)
except FileNotFoundError:
print(“error con Archivo”)
sys.exit()
Manejo de archivo csv
16
01/11/2016
Manejo de csv
import csv
workbook_file=open("datos.csv","r")
workbook_reader=csv.reader(workbook_file)
for fila in workbook_reader:
print(fila)
workbook_file.close()
17

Documentos relacionados