Presentación y cargando un archivo en un diccionario.

Chema Cortés py en ch3m4.org
Mar Jun 1 15:29:31 CEST 2004


El Martes, 1 de Junio de 2004 12:49, Víctor Peinado escribió:

> - ¿Es necesario comprobar que se ha cargado correctamente el archivo? O
> preguntando de otro modo, ¿cómo se traduce el siguiente idiom de Perl?
>
>    open FILEHANDLE, $file or die "$!"

Si llegara a producirse un error, saltaría una excepción si posibilidad de 
comprobar el valor que retorna. Hay que tener presente que los errores en 
python producen "excepciones", y que sólo se deben procesar aquellas 
excepciones de las que se sepa recuperarse. Por ejemplo, el fragmento de perl 
sería algo así:

  try:
    f=file(stopwordsFile)
  except Exception, e:
	sys.stderr.write( e.errno )

Pero el mecanismo de excepciones daría para hacer muchas cosas más:

  try:
    f=file(stopwordsFile)
  except OSError, e:
    print "No he podido abrir el fichero"
    f=None
  except Exception, e:
    print "Ha habido un error que no sé cómo tratar"
    print e.errno,e.strerror
    raise        #mandamos el error "hacia arriba" en la pila de ejecución


Incluso se podría entrar en el debugger python para intentar averiguar algo:

  except:
    import sys,pdb
    t=sys.exc_info()
    pdb.post_mortem(t[2])


> - ¿Es necesario cerrar el archivo por defecto se cierra cuando abra otro o
> cuando termine el script?

No, pero sería recomendable. Cuando ningún quede ningún objeto que referencie 
al archivo abierto, el recolector de basura (gc) eliminará de memoria la 
referencia al objeto, cerrándose en ese momento el fichero.

> - ¿Existe alguna variable interna de Python que guarde los errores, como
> hace $! en Perl?

No existe algo así de global y general. Los errores en python se encapsulan en 
excepciones para procesarlos sin peligro de que sean machacados por futuros 
errores. Si quieres saber el número de error, lo tienes en la propiedad 
'.errno' de la excepción.

Si quieres saber el nombre del error, usa el módulo 'errno'

  from errno import errorcode
  print errorcode[e.errno]

> - ¿La forma más sencilla de recorre un fichero de texto línea a línea es
> usando el módulo fileinput y haciendo?
>
> for linea in fileinput.input():
>     print linea

Lo más sencillo:

for linea in file("MiFichero"):
  print linea

El fileinput es un módulo de ayuda con el que se puede procesar un listado de 
ficheros dado en la línea de comandos.

> - ¿Dónde puedo leer algo acerca de interpolación de variables en cadenas y
> demás?

Mira el operador de formateo "%". El resto de métodos de las cadenas de 
caracteres también pueden serte útiles:

a='mundo'
print "hola, %s" % a    #imprime: "hola, mundo"

a=[ "mundo", 2004, 1]
print "hola %s" % a    #imprime: "hola ['mundo', 2004, 1]"

print "hola %s - año %d:%02d" % tuple(a) #imprime: "hola mundo - año 2004:01"

print ",".join([str(x).upper() for x in a]) #imprime: MUNDO,2004,0
#éste ejemplo usaba la comprensión de listas.

a={"nombre":"Pepe", "tel":1234}
print "Nombre: %(nombre)s - Tel: %(tel)06d" % a
#imprime: "Nombre: Pepe - Tel: 00123"

------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es


Más información sobre la lista de distribución Python-es