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'
Curso online 👨💻
¡Ya lanzamos el curso oficial de Recursos Python en Udemy!
Un curso moderno para aprender Python desde cero con programación orientada a objetos, SQL y tkinter
en 2024.
Consultoría 💡
Ofrecemos servicios profesionales de desarrollo y capacitación en Python a personas y empresas. Consultanos por tu proyecto.
Marco Rocano says:
como hacer un import de un archivo que no esta dentro del director actual, y ejecutarlo(.py)
Recursos Python says:
No es algo muy recomendado, pero podés agregar la carpeta donde se encuentra el módulo a la lista
sys.path
, algo así:import sys
sys.path.append("C:/ruta/a/carpeta")
import modulo
walter says:
para cargarlo como modulo con import debes crear el archivo __init__.py en la carpeta, asi python sabe que son modulos, no solo archivos
Andy says:
Como puedo ordenar desde python abrir un archivo en una ubicacion especifica, ejemplo: Quiero abrir el documento que se encuentra en la ruta C:/Trabajos/python/archivos/trabajos.txt
Recursos Python says:
Hola. Seguramente esto te sirva: Cómo abrir un archivo con su programa predeterminado.
walter says:
importa «os» y dale esa ruta
adefecio nuclear says:
quiero ejecutar un archivo phyton, escribo la ruta y ahi es cuando me saltan errores de sintax marcandome el primer signo de dos puntos en rojo ¿ A que se debe? como los soluciono?
Recursos Python says:
Hola, ¿cuál es la línea donde te marca el error?
walter says:
la barra invertida puede ser, usa la funcion r
Tyto369 says:
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
Recursos Python says:
Hola. La función
os.path.expandvars("%userprofile%")
retorna la ruta de la carpeta personal.Saludos
Raul Parra Orizondo says:
Great! Muchas Gracias
Gabriela says:
Como crear carpetas consecutivas,
por ejemplo si ya existe carpeta1, que la proxima que cree sea la carpeta 2
Recursos Python says:
Hola. Para problemas específicos te invito a registrarte y crear un tema en el foro para que podamos ayudarte.
Un saludo.
carlos says:
pues yo la creo con la fecha y ora nada mas
Tula flacida says:
Con un contador
ej :
import os
contador = 0
while True:
os.mkdir(«carpeta»+str(contador))
contador=contador+1
martiyos says:
Buenísimo, justo lo que necesitaba, Muchas gracias, sigan así!