UNIVERSIDAD DE COSTA RICA ESCUELA DE INGENIERÍA ELÉCTRICA PROGRAMACIÓN BAJO PLATAFORMAS ABIERTAS IE-0117 Francisco Molina Castro - B14194 LABORATORIO 10 - I CICLO 2012 100 Entrada y Salida, Funciones del Sistema 1. Escriba un programa que tome como argumento (a través de la línea de comandos) el nombre de un archivo que contenga números enteros (uno por línea) sin orden alguno y cree un nuevo archivo que contenga los mismos nú- meros ordenados. La forma de ordenar los números (ascendente o descendente) será determinado por un segundo argumento, pasado también a través de la línea de comandos. El programa ejemplo sería: # ! / u s r / b i n / python import sys import os # V e r i f i c a que e l u s u a r i o d i g i t e 2 argumentos i f l e n ( sys . argv ) ! = 3 : p r i n t ( " c a n t i d a d de argumentos i n c o r r e c t a " ) sys . e x i t ( 0 ) #Guarda l s o argumentos en l a s v a r i a b l e s d i r e c c i o n y orden arch = sys . argv [ 1 ] orden= sys . argv [ 2 ] # V e r i f i c a que l a d i r e c c i o n e x i s t a i f os . path . e x i s t s ( arch )== False : p r i n t "No se encuentra e l a r c h i v o s o l i c i t a d o " sys . e x i t ( 0 ) #Abre e l a r c h i v o para l e e r l o Leer= open ( arch , " r " ) #Lee e l a r c h i v o y crea l i s t a con l a s l i n e a s numeros = Leer . r e a d l i n e s ( ) # C o n v i e r t e l a l i s t a de c a r a c t e r e s a e n t e r o s numeros = map( i n t , numeros ) #Ordena en orden ascendente , crea y e s c r i b e en e l a r c h i v o i n i c i a n d o d e l p r i n c i p i o E s c r i b i r =open ( ’ Ordenados . t x t ’ , "w" ) numeros . s o r t ( ) # I n v i e r t e e l orden s i se i n d i c a i f orden == " d " : numeros . r e v e r s e ( ) f o r x i n range ( l e n ( numeros ) ) : p r i n t >> E s c r i b i r , numeros [ x ] 1 UNIVERSIDAD DE COSTA RICA ESCUELA DE INGENIERÍA ELÉCTRICA PROGRAMACIÓN BAJO PLATAFORMAS ABIERTAS IE-0117 Francisco Molina Castro - B14194 LABORATORIO 10 - I CICLO 2012 Este nos da algunos resultados como: 2 UNIVERSIDAD DE COSTA RICA ESCUELA DE INGENIERÍA ELÉCTRICA PROGRAMACIÓN BAJO PLATAFORMAS ABIERTAS IE-0117 Francisco Molina Castro - B14194 LABORATORIO 10 - I CICLO 2012 2. Escriba un programa que reciba, a través de la línea de comandos, el nombre de un directorio e imprima todos los archivos de ese directorio que son enlaces simbólicos, junto con el nombre del archivo al cual apunta cada uno de ellos. Opcionalmente, el programa puede recibir el nombre de un archivo como segundo argumento. Si es así, la salida debe imprimirse en este archivo y no en la terminal. El programa ejemplo sería: # ! / u s r / b i n / python # encoding : u t f −8 import sys import os import g l o b # V e r i f i c a que e l u s u a r i o d i g i t e 1 o 2 argumentos i f l e n ( sys . argv ) > 3 : p r i n t ( " Cantidad de argumentos i n c o r r e c t a " ) sys . e x i t ( 0 ) i f l e n ( sys . argv ) <=1: p r i n t ( " Cantidad de argumentos i n c o r r e c t a " ) sys . e x i t ( 0 ) # V e r i f i c a que l a d i r e c c i o n e x i s t a i f os . path . i s d i r ( sys . argv [ 1 ] ) = = False : p r i n t ( " D i r e c t o r i o no encontrado " ) sys . e x i t ( 0 ) #Agrega un / ∗ para l i s t a r todos l o s a r c h i v o s d i r e c c i o n = sys . argv [ 1 ] + ’ / ∗ ’ l i s t a =glob . glob ( d i r e c c i o n ) simbol = [ ] #Agrega l a l i s t a de enlaces a s i m b o l f o r a i n range ( l e n ( l i s t a ) ) : i f os . path . i s l i n k ( l i s t a [ a ] ) = = True : s i m b o l . append ( l i s t a [ a ] ) # S i s o l o d i g i t a e l d i r e c t o r i o , imprime l o s enlaces s i m b o l i c o s en l a t e r m i n a l i f l e n ( sys . argv )== 2 : print simbol # s i d i g i t a e l a r c h i v o , imprime l o s enlaces s i m b o l i c o s en e l a r c h i v o i f l e n ( sys . argv )== 3 : a r c h i v o = open ( sys . argv [ 2 ] , "w" ) f o r b i n range ( l e n ( s i m b o l ) ) : p r i n t >> a r c h i v o , s i m b o l [ b ] 3. Escriba un programa que tome como argumento (a través de la línea de comandos) el nombre de un directorio e imprima, de manera recursiva, la lista de todos los archivos que se encuentran en 3 UNIVERSIDAD DE COSTA RICA ESCUELA DE INGENIERÍA ELÉCTRICA PROGRAMACIÓN BAJO PLATAFORMAS ABIERTAS IE-0117 Francisco Molina Castro - B14194 LABORATORIO 10 - I CICLO 2012 él junto con su tamaño. El programa además debe imprimir al final el espacio total ocupado por el directorio (la suma de los tamaños de todos los archivos). Si el argumento pasado por el usuario no corresponde a ningún directorio del sistema, el programa debe imprimir un mensaje de error. El programa ejemplo sería: # ! / u s r / b i n / python import import import import math sys os glob # V e r i f i c a que e l u s u a r i o d i g i t e 1 argumentos i f l e n ( sys . argv ) ! = 2 : p r i n t ( " c a n t i d a d de argumentos i n c o r r e c t a " ) sys . e x i t ( 0 ) #Guarda l o s argumentos en l a s v a r i a b l e s d i r e c c i o n y orden d i r e c c i o n = sys . argv [ 1 ] # V e r i f i c a que se i n t r o d u z c a un d i r e c t o r i o que e x i s t e i f os . path . i s d i r ( d i r e c c i o n )== False : p r i n t " E l d i r e c t o r i o no e x i s t e " sys . e x i t ( 0 ) #Agrega / ∗ para que g l o b e n l i s t e todos l o s d i r e c t o r i o s direccion=direccion+" /∗ " #Hace l a l i s t a de todo l o que e s t a en e l d i r e c t o r i o l i s t a =glob . glob ( d i r e c c i o n ) t o t a l =0 def r e c u r s i o n ( l i s t a ) : global t o t a l f o r x i n range ( l e n ( l i s t a ) ) : # S i l a d i r e c c i o n es de un a r c h i v o i f os . path . i s f i l e ( l i s t a [ x ] ) = = True : #Imprime su nombre y su tamano p r i n t os . path . basename ( l i s t a [ x ] ) , os . path . g e t s i z e ( l i s t a [ x ] ) #Agrega a l a l i s t a de tamanos e l tamano de e l a r c h i v o t o t a l +=os . path . g e t s i z e ( l i s t a [ x ] ) # S i l a d i r e c c i o n es de un d i r e c t o r i o i f os . path . i s d i r ( l i s t a [ x ] ) = = True : #Agrega / ∗ para que g l o e n l i s t e todo d ir e = l i s t a [ x ]+ " /∗ " l i s t a 2 =glob . glob ( d i r e ) #Lo e n v i a a r e c u r s i o n recursion ( l i s t a 2 ) 4 UNIVERSIDAD DE COSTA RICA ESCUELA DE INGENIERÍA ELÉCTRICA PROGRAMACIÓN BAJO PLATAFORMAS ABIERTAS IE-0117 Francisco Molina Castro - B14194 LABORATORIO 10 - I CICLO 2012 recursion ( l i s t a ) #Imprime e l t o t a l p r i n t " Su D i r e c t o r i o t i e n e un tamano de " , t o t a l Este nos da algunos resultados como: 5