1. Aspectos generales 2. Parte 1

Anuncio
Universidad de Costa Rica
Facultad de Ingenieria
Escuela de Ingenieria Electrica
Programacion Bajo Plataformas Abiertas IE-0117
I CICLO 2012
Laboratorio 10
Sebastian Sotela Golcher
B16455
1.
100
Muy bien!
Aspectos generales
En este laboratorio se aprendio a usar funciones de sistema. Al principio se utilizo el modulo subprocess pero
se tuvo muchos problemas por lo que se opto por glob. Definitivamente la mas util de las funciones fue path.walk()
del modulo os ya que define una recursion completa a traves de un directorio. Es bueno trabajar con archivos .txt
ya que no presentan ninguna clase de problemas con codificacion por ejemplo. El modulo que mas se uso en esta
asignacion fue el os. A continuacion se presenta lo que se hizo en cada laboratorio bien comentado.
2.
Parte 1
# ! / u s r / b i n / python
# −∗− coding : l a t i n −1 −∗−
#Modulos ocupados en e l programa
import math
import sys
# e s t e modulo s i r v e para e f e c t u a r f u n c i o n e s de sistema
import os
#######################################################################################
# d e f i n e un metodo que l e e una l i s t a de numeros y l a ordena de manera ascendente o
#descendente
def o r d e n a l i s t a s ( ) :
#se abre , y s i no e x i s t e se crea , un a r c h i v o con e l nombre d e l segundo
#argumento , para e s c r i b i r sobre e l
datos = open ( sys . argv [ 1 ] , ’ r ’ )
# se d e f i n e l a opcion de ordenar l i s t a s como e l t e r c e r argumento
opcion = sys . argv [ 2 ]
# i n i c i a l i z a una l i s t a v a c i a
lista = []
#se i t e r a a t r a v e s de l a s l i n e a s d e l a r c h i v o hasta que en e s t a s no se l e a nada
while True :
# devuelve e l v a l o r de una l i n e a y mueve l a p o s i c i o n d e l p u n t e r o
elemento = datos . r e a d l i n e ( )
# s i l a l i n e a t i e n e a l g o e s c r i t o se agreg a l a l i s t a , ademas de
# transformarlo a entero
i f elemento :
l i s t a . append ( i n t ( elemento ) )
# s i l a l i n e a no t i e n e nada se s a l e d e l c i c l o
else :
break
Universidad de Costa Rica
Facultad de Ingenieria
Escuela de Ingenieria Electrica
Programacion Bajo Plataformas Abiertas IE-0117
I CICLO 2012
Laboratorio 10
Sebastian Sotela Golcher
B16455
# c i e r r el archivo
datos . c l o s e ( )
#ordena l a l i s t a de manera ascendente
l i s t a . sort ()
# S i l a opcion es ascendente se imprime l a l i s t a como e s t a
i f opcion == ’ a ’ :
return l i s t a
# s i l a opcion es descendente se i n v i e r t e e l orden de l a l i s t a con l a
# funcion reverse
e l i f opcion == ’ d ’ :
l i s t a . reverse ( )
return l i s t a
# S i no se i n t r o d u c e un argumento v a l i d o se imprime un e r r o r en p a n t a l l a y
# f i n a l i z a e l programa
else :
p r i n t " E r r o r : argumento i n v a l i d o \ n NOTA: E l t e r c e r argumento
c o n t i e n e l a s opciones ’ a ’ para ascendente y ’ d ’ para descendente "
sys . e x i t ( 1 )
# d e f i n e una f u n c i o n que crea un nuevo a r c h i v o con l a l i s t a ordenada
def ArchivoOrdenado ( ) :
# o b t i e n e l a s a l i d a de l a f u n c i o n a n t e r i o r
listaordenada = ordenalistas ( )
#abre , o crea s i no e x i s t e , un a r c h i v o para e s c r i b i r sobre e l
archivo_ordenado =open ( ’ l i s t a _ o r d e n a d a . t x t ’ , ’w ’ )
# i t e r a a t r a v e s de l a l i s t a ordenada
for x in listaordenada :
#se imprime en e l a r c h i v o cada elemento de l a l i s t a
p r i n t >>archivo_ordenado , " %d \ n " %(x )
# cierra el archivo
archivo_ordenado . c l o s e ( )
# imprime un mensaje de e x i t o
p r i n t "Ha creado un a r c h i v o d e l c o n t e n i d o de %s ordenado de manera opcion = %s "
%(sys . argv [ 1 ] , sys . argv [ 2 ] )
################################################Programa P r i n c i p a l ##################
#se deben i n t r o d u c i r 3 argumentos para que e l programa c o r r a
i f l e n ( sys . argv ) ! = 3 :
p r i n t " E r r o r : Debe i n t r o d u c i r 3 argumentos : \ n Uso c o r r e c t o : %s a r c h i v o
opcion " %(sys . argv [ 0 ] )
sys . e x i t ( 1 )
# V e r i f i c a que se i n t r o d u z c a una r u t a e x i s t e n t e
i f os . path . e x i s t s ( sys . argv [ 1 ] ) :
# s i e l segundo argumento es un a r c h i v o se procede
i f os . path . i s f i l e ( sys . argv [ 1 ] ) :
#LLama a l a f u n c i o n con e s t e nombre
ArchivoOrdenado ( )
# s i e l argumento no es un a r c h i v o se imprime un e r r o r
Universidad de Costa Rica
Facultad de Ingenieria
Escuela de Ingenieria Electrica
Programacion Bajo Plataformas Abiertas IE-0117
I CICLO 2012
Laboratorio 10
Sebastian Sotela Golcher
B16455
else :
p r i n t " E r r o r : %s no es un a r c h i v o "
sys . e x i t ( 1 )
else :
p r i n t " E r r o r : La r u t a s e l e c c i o n a d a no e x i s t e "
sys . e x i t ( 1 )
3.
Parte 2
# ! / u s r / b i n / python
# −∗− coding : l a t i n −1 −∗−
#Modulos ocupados en e l programa
import math
import sys
import os
# g l o b es un modulo que me p e r m i t e l i s t a r e l c o n t e n i d o de un d i r e c t o t i o por ejemplo
import g l o b
################################ Funciones ###########################################
# d e f i n e una f u n c i o n que d e s p l i e g a l o s a r c h i v o s que son enlaces s i m b o l i c o s y h a c i a
#adonde apuntan se d e f i n e None como v a l o r predeterminado , es d e c i r s i no se l e dan
# parametros no hace nada
def enlaces ( d i r e c t o r i o , a r c h i v o =None ) :
# v e r i f i c a s i e l segundo argumento es un d i r e c t o r i o
i f not os . path . i s d i r ( d i r e c t o r i o ) :
p r i n t " E r r o r : e l segundo argumento no es un d i r e c t o r i o "
#se o b t i e n e una l i s t a de todo elemento d e l d i r e c t o r i o
# e l a s t e r i s c o s i m b o l i z a c u a l q u i e r cosa
contenido = glob . glob ( d i r e c t o r i o +" / ∗ " )
# s i se i n t r o d u j o l a v a r i a b l e a r c h i v o :
i f archivo :
#se abre o se crea un a r c h i v o para e s c r i b i r sobre e l
datos = open ( a r c h i v o , ’w ’ )
#se imprime en e l a r c h i v o e l t i t u l o de l a l i s t a
p r i n t >> datos , " L i s t a de elementos con enlace s i m b o l i c o en e l
directorio " , directorio
# s i no se i n t r o d u j o l a v a r i a b l e a r c h i v o se imprime en p a n t a l l a e l t i t u l o de l a
#lista
else :
p r i n t " L i s t a de elementos con enlace s i m b o l i c o en e l d i r e c t o r i o " ,
directorio
# usar l a combinacion de range y l e n es u t i l para no usar contadores
f o r n i n range ( l e n ( c o n t e n i d o ) ) :
# e s t a f u n c i o n de os me p e r m i t e v e r i f i c a r s i e l a r c h i v o es un enlace
#simbolico
i f os . path . i s l i n k ( c o n t e n i d o [ n ] ) :
# e s t a f u n c i o n de os o b t i e n e l a d i r e c c i o n en l a que apunta e l
#link
Universidad de Costa Rica
Facultad de Ingenieria
Escuela de Ingenieria Electrica
Programacion Bajo Plataformas Abiertas IE-0117
I CICLO 2012
Laboratorio 10
Sebastian Sotela Golcher
B16455
enlace = os . r e a d l i n k ( c o n t e n i d o [ n ] )
# s i se i n t r o d u j o l a v a r i a b l e se imprime en e l a r c h i v o
i f archivo :
p r i n t >>datos , c o n t e n i d o [ n ] , "−−−>" , enlace
# s i no se i n t r o d u j o l a v a r i a b l e se imprime e l c o n t e n i d o en
# consola
else :
p r i n t c o n t e n i d o [ n ] , "−−−>" , enlace
# para e l caso d e l a r c h i v o se c i e r r a e s t e y se imprime una n o t i f i c a c i o n de
creacion
i f archivo :
datos . c l o s e ( )
p r i n t "Ha creado un a r c h i v o con l a l i s t a de enlaces s i m b o l i c o s d e l
directorio "
########################################Programa P r i n c i p a l #########################
#se o b t i e n e l a r u t a a b s o l u t a d e l segundo argumento i n t r o d u c i d o para e l uso de
# f u n c i o n e s d e l modulo os
D i r e c t o r i o = os . path . abspath ( sys . argv [ 1 ] )
# s i se u t i l i z a n 2 argumentos l a f u n c i o n enlaces r e c i b e 1
i f l e n ( sys . argv ) == 2 :
enlaces ( D i r e c t o r i o )
# s i se u t i l i z a n 3 argumentos l a f u n c i o n enlaces r e c i b e 2
i f l e n ( sys . argv ) == 3 :
enlaces ( D i r e c t o r i o , sys . argv [ 2 ] )
# s i no se r e c i b e n l a c a n t i d a d de argumentos debida se imprime un e r r o r y f i n a l i z a
# e l programa
else :
p r i n t " E r r o r : Se deben i n t r o d u c i r dos o t r e s argumentos \ nUso c o r r e c t o :
%s d i r e c t o r i o a r c h i v o ( o p c i o n a l ) " %(sys . argv [ 0 ] )
4.
Parte 3
# ! / u s r / b i n / python
# −∗− coding : l a t i n −1 −∗−
#Modulos ocupados en e l programa
import math
import sys
import os
################################ Funciones ####################################################
# d e f i n e una f u n c i o n que d e s p l i e g a e l c o n t e n i d o de todos l o s a r c h i v o s de un
# d i r e c t o r i o de manera r e c u r s i v a , imprime su r e s p e c t i v o tamano y e l tamano
# t o t a l del d i r e c t o r i o
def c o n t e n i d o D i r e c t o r i o ( D i r e c t o r i o ) :
# v e r i f i c a que e l argumento sea un d i r e c t o r i o
i f not os . path . i s d i r ( D i r e c t o r i o ) :
Universidad de Costa Rica
Facultad de Ingenieria
Escuela de Ingenieria Electrica
Programacion Bajo Plataformas Abiertas IE-0117
I CICLO 2012
Laboratorio 10
Sebastian Sotela Golcher
B16455
p r i n t " E r r o r : e l segundo argumento no es un d i r e c t o r i o \ n "
sys . e x i t ( 1 )
#se i n i c i a l i z a e l tamano t o t a l
tamanototal = 0
# t i t u l o del l i s t a d o
p r i n t " Contenido t o t a l d e l d i r e c t o r i o " , D i r e c t o r i o
# l a f u n c i o n walk me r e c o r r e todos l o s s u b d i r e c t o r i o s y a r c h i v o s
f o r a c t u a l , d i r e c t o r i o s , a r c h i v o s i n os . walk ( D i r e c t o r i o ) :
#se i t e r a a t r a v e s de todos l o s a r c h i v o s
f o r arch i n a r c h i v o s :
# l a f u n c i o n j o i n me p e r m i t e o b t e n e r r u t a s a b s o l u t a s
# uniendo l a d i r e c c i o n d e l d i r e c t o r i o con e l nombre d e l
#archivo
r u t a = os . path . j o i n ( a c t u a l , arch )
# l a f u n c i o n g e t s i z e me da e l tamano de cada a r c h i v o
tamano = os . path . g e t s i z e ( r u t a )
#cada uno se suma a l tamano t o t a l
t a m a n o t o t a l += tamano
#cada uno se imprime de l a s i g u i e n t e manera
p r i n t " A r c h i v o : " , arch , "−−−>Tamano : " , tamano , " b y t e s "
# a l f i n a l se imprime e l t o t a l
p r i n t " E l c o n t e n i d o d e l d i r e c t o r i o t i e n e un tamano de : " , t a m a n o t o t a l ,
" bytes "
###########################Programa P r i n c i p a l ######################################
# v e r i f i c a que se i n t r o d u z c a n 2 argumentos
i f l e n ( sys . argv ) ! = 2 :
p r i n t " E r r o r : Se deben i n t r o d u c i r dos argumentos \ nUso c o r r e c t o : %s
d i r e c t o r i o " %(sys . argv [ 0 ] )
sys . e x i t ( 1 )
#se o b t i e n e l a r u t a a b s o l u t a d e l argumento para e v i t a r problemas
D i r e c t o r i o = os . path . abspath ( sys . argv [ 1 ] )
#Llama a l a f u n c i o n d e f i n i d previamente
contenidoDirectorio ( Directorio )
Descargar