Operaciones con archivos y carpetas



Versión: 2.x, 3.x.

Python provee de forma estándar un amplio conjunto de funciones para realizar operaciones con archivos y carpetas, de tal modo que es posible desarrollar un explorador de archivos multiplataforma sin utilizar paquetes adicionales. Los módulos principales son os y os.path, en un aspecto más general, y shutil, especializado en operaciones de alto nivel para el manejo de documentos y directorios. Notarás que muchas de estas funciones suelen frecuentar en la mayoría de vuestros programas.

Directorio actual

Una de las funciones más utilizadas en el rubro es getcwd() (current working directory), tal como lo indica su nombre, retorna la ruta actual desde donde se ejecuta nuestro script, o bien el directorio de instalación de Python en caso de tratarse del intérprete.

>>> import os
>>> os.getcwd()
'/home/usuario'

>>> import os
>>> os.getcwd()
'C:\\Python27'

En Python 2.x, la función getcwdu (de unicode) se comporta igual que la anterior, aunque la representación de la cadena es unicode.

>>> os.getcwdu()
u'C:\\Python27'

A partir de la rama 3.x, getcwd() retorna siempre unicode, al ser la representación predeterminada, y la función getcwdb (bytes) obtiene la ruta como una secuencia de bytes.

>>> os.getcwdb()
b'C:\\Python34'

Listado de archivos y carpetas

La función listdir (list directory) retorna una lista que contiene archivos y carpetas en una determinada ubicación.

>>> os.listdir("/usr/games")
['mahjongg', 'sol', 'gnome-sudoku', 'gnomine']

>>> os.listdir("C:\\")
['Archivos de programa', 'autoexec.bat', 'Boot', 'bootmgr', 'BOOTNXT', 'Documents and Settings', 'hiberfil.sys', 'MSOCache', 'pagefile.sys', 'PerfLogs', 'Program Files', 'Program Files (x86)', 'ProgramData', 'Python27', 'Python34', 'swapfile.sys', 'System Volume Information', 'Users', 'Windows']

En Python 2.x, si el argumento es un objeto unicode, los ítems resultantes mantendrán esta codificación, en caso de ser posible. De forma análoga, Python 3 permite especificar un directorio del tipo bytes.

>>> os.listdir(u"C:\\")
[u'Archivos de programa', u'autoexec.bat', u'Boot', u'bootmgr', u'BOOTNXT', u'Documents and Settings', u'hiberfil.sys', u'MSOCache', u'pagefile.sys', u'PerfLogs', u'Program Files', u'Program Files (x86)', u'ProgramData', u'Python27', u'Python34', u'swapfile.sys', u'System Volume Information', u'Users', u'Windows']

>>> os.listdir(b"C:\\")
[b'Archivos de programa', b'autoexec.bat', b'Boot', b'bootmgr', b'BOOTNXT', b'Documents and Settings', b'hiberfil.sys', b'MSOCache', b'pagefile.sys', b'PerfLogs', b'Program Files', b'Program Files (x86)', b'ProgramData', b'Python27', b'Python34', b'swapfile.sys', b'System Volume Information', b'Users', b'Windows']

Puede utilizarse "." como argumento para indicar el directorio actual.

>>> os.listdir(".")
['DLLs', 'Doc', 'include', 'Lib', 'libs', 'LICENSE.txt', 'msvcr100.dll', 'NEWS.t
xt', 'py.exe', 'python.exe', 'python34.dll', 'pythonw.exe', 'pyw.exe', 'qt.conf'
, 'README.txt', 'Scripts', 'tcl', 'Tools']

O bien omitir el directorio en Python 3: os.listdir().

Creación y eliminación de directorios

Las funciones mkdir (make directory) y makedirs permiten crear carpetas indicando su ubicación y, en algunos sistemas, los permisos (0o777 por defecto, es decir, todas las operaciones – véase File system permissions).

>>> os.mkdir("Libros")
>>> os.makedirs("Musica/Pop/2014")
>>> os.mkdir("Lectura", 0o444)  # Sólo lectura

Estos pueden eliminarse utilizando las funciones contrarias: rmdir y removedirs.

>>> os.rmdir("Libros")
>>> os.removedirs("Musica/Pop/2014")

Un intento por eliminar directorios que no estén vacíos lanzará la excepción OSError. Para remover carpetas que contengan otros archivos y carpetas debe utilizarse la función rmtree del módulo shutil.

>>> import shutil
>>> shutil.rmtree("mp3")

Por último, para deshacerse de un archivo específico debe utilizarse os.remove.

>>> os.remove("LICENCIA.txt")

Copiar, mover y renombrar

Las funciones principales para el copiado de archivos son copy y copy2, aceptando un argumento de entrada (fuente), y otro de salida (destino).

>>> shutil.copy("LICENSE.txt", "LICENCIA.txt")
'LICENCIA.txt'

A diferencia, copy2 incluye el copiado de metadatos (fecha de creación, modificación, etc.).

Otras funcionalidades de copiado incluyen copymode y copystat que copian los permisos (mencionados anteriormente) y los metadatos de un archivo a otro, respectivamente.

Para copiar un directorio que contenga archivos y carpetas debe utilizarse copytree() (véase la documentación oficial para otros argumentos y mayor detalle).

>>> shutil.copytree("Tools", "Copia de Tools")
'Copia de Tools'

La función move opera de forma similar, moviendo un elemento en lugar de copiarlo. Por ejemplo, el siguiente código mueve la carpeta Tools una ubicación más arriba (directorio padre) y luego la restaura a su ubicación original.

>>> shutil.move("Tools", "../Copia de Tools")
'../Copia de Tools'
>>> shutil.move("../Copia de Tools", "Tools")
'Tools'

os.rename() es utilizada para renombrar un archivo o carpeta.

>>> os.rename("NEWS.txt", "NOTICIAS.txt")
>>> os.rename("NOTICIAS.txt", "NEWS.txt")

Si el segundo argumento corresponde al nombre de un archivo existente, su contenido es reemplazado; si es una carpeta, se lanzará la excepción OSError.

Otras operaciones

Las siguientes funciones operan con un único argumento, path, que determina el archivo o directorio con el que se quiere trabajar.

Determinar existencia de un archivo o carpeta.

>>> import os.path
>>> os.path.exists("Tools")
True
>>> os.path.exists("Herramientas")
False

Determinar si la ruta especificada es archivo o carpeta.

>>> os.path.isfile("Tools")
False
>>> os.path.isfile("NEWS.txt")
True
>>> os.path.isdir("Tools")
True
>>> os.path.isdir("NEWS.txt")
False

Construir rutas a partir de la concatenación de distintos nombres.

>>> os.path.join("Descargas", "Fondos", "paisaje.jpg")
'Descargas/Fondos/paisaje.jpg'

>>> os.path.join("Musica", "pop", "2014", "theme.mp3")
'Musica\\pop\\2014\\theme.mp3'



7 comentarios.

  1. Como puedo acceder a la carpeta personal de usuario en windows 10??? Por ejemplo, si el usuario de mi PC es Fulano la carpeta personal estaria ubicada en C:/Users/Fulano o C:/Usuarios/Fulano, en dependencia del idioma

Deja una respuesta