Entrada y Salida, Funciones del Sistema

Anuncio
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
Descargar