Curso Python DGA 2011/sistemas/manejo sistemas ficheros directorios

De WikiEducator
Saltar a: navegación, buscar

Manejo de sistemas de ficheros y directorios

Como ya sabemos, uno de los puntos fuertes de python es que viene con "baterías incluidas". Para el manejor de ficheros y directorios, python provee numerosas funciones y módulos para facilitarnos la vida. En esta sección enumeraremos algunas de ellas.



Icon reading.jpg

Lectura

Esta seccion pretende ser un resumen rápido de algunas de las funciones que pueden sernos útiles a la hora de manejar sistemas de ficheros en nuestros scripts. Para una información detallada, y exhaustiva, como siempre, consultar la documentación de referencia de python



Trabajando con paths

  • os.path.abspath(path) - Devuelve el path absoluto del path pasado (a partir del directorio de trabajo actual)
  • os.path.basename(path) - Devuelve la última parte del path pasado
>>> os.path.basename("/tmp/onedir/otherdir/file1")
'file1'
>>> os.path.basename("/tmp/onedir/otherdir/file1/") # cuidado! no se comporta como '''basedir''' de GNU
''
  • os.path.dirname(path) - Devuelve la primera parte del path pasado
>>> os.path.dirname("/tmp/onedir/otherdir/file1")
'/tmp/onedir/otherdir'
>>> os.path.dirname("/tmp/onedir/otherdir/file1/") # cuidado! no se comporta como '''dirname''' de GNU
'/tmp/onedir/otherdir/file1'
  • os.path.exists(path) - devuelve true si el path existe
  • os.path.expandvars(path) - devuelve el argumento pasado, pero con variables de entorno tipo $VAR o ${VAR} (o %VAR% en windows) sustituidas
>>> os.path.expandvars("$PATH:/home/luis/myprog")
'/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/opt/maven/bin:/opt/ant/bin:/opt/jython:/home/luis/myprog'
  • os.path.getsize(path) - devuelve el tamaño en bytes de un archivo
  • os.path.isdir(path) - true si el path apunta a un directorio
  • os.path.islink(path) - true si el path apunta a un link simbólico
  • os.path.join(path1[, path2[, ...]]) - une componentes de path
  • os.path.normpath(path) - normaliza un path, eliminando separadores duplicados, transformando "/" en "\" en windows, etc
  • os.path.realpath(path) - normaliza un path, resolviendo links
  • glob.glob(pathname) - Devuelve una lista de paths que matchean con el path pasado que puede usar wildcards. Ej: "/home/luis/images/*/*.gif"


Trabajando con sistemas de ficheros

  • os.access(path, mode) - comprueba el acceso a un fichero (ej, comprobar permiso de lectura, escritura, etc)
  • os.getcwd() - devuelve el directorio de trabajo actual
  • os.chdir(path) - cambia el directorio de trabajo actual a path
  • os.chroot(path) - cambia el directorio root del proceso actual (solo unix)
  • os.chmod(path, mode) - cambia el modo de acceso del path (se pueden usar constantes stat.S_IXXXX)
  • os.chown(path, uid, gid) - cambia el proopietario del path
  • os.link(source, link_name) y os.symlink(source, link_name) - crean links 'duros' y simbólicos, respectivamente
  • os.listdir(path) - lista los nombres de las entradas del directorio especificado
  • os.mkdir(path[, mode]) y os.mkdirs(path[, mode]) - crean directorios con el modo especificado. mkdirs crea los directorios intermedios si no existen.
  • os.remove(path) - elimina el path (lanza OSError si no es un fichero)
  • os.removedirs(path) - intenta eliminar directorios recursivamente hasta que un directorio padre no está vacío
  • os.rename(src, dst) y os.renames(src, dst) - renombran ficheros o directorios. renames renombra directorios intermedios
  • os.rmdir(path) - elimina un directorio
  • os.stat - devuelve estructura con información del path
>>> os.stat("/tmp/file")
posix.stat_result(st_mode=33188, st_ino=2761989, st_dev=2053L, st_nlink=1, st_uid=0, st_gid=0, st_size=4, st_atime=1314555833, st_mtime=1314555834, st_ctime=1314557080)
  • os.tmpfile() - crea un nuevo fichero y lo abre en modo actualización ("w+b") y se elimina una vez que no queden descriptores abiertos
  • os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]]) - Generador que recorre la estructura de directorios y ficheros a partir del directorio pasado (de menos profundidad a más profundidad, usar topdown=False para lo contrario)
>>> for root, dirs, files in os.walk("/tmp/"):
...     print("{0} contains: {1}".format(root, ",".join(files))
... 
/tmp/ contains: debug.log,gedit.luis.4232724968,file,.X0-lock
/tmp/.X11-unix contains: X0
/tmp/.org.chromium.y7ZDIS contains: SingletonSocket,SingletonCookie
..

módulo shutil

  • shutil.copy(src, dst) y shutil.copy2(src, dst). Copian el fichero src en el directorio o fichero dst. copy2 copia adicionalmente los permisos, flags, y tiempos de acceso y modificación.
  • shutil.copytree(src, dst[, symlinks=False[, ignore=None]]) - Copia recursivamente el directorio src en dst
  • shutil.rmtree(path[, ignore_errors[, onerror]]) - Elimina recursivamente el directorio path
  • shutil.move(src, dst) - Mueve un fichero o directorio
  • shutil.make_archive - Crea archivos tar y zip.