Muchos programas Python necesitan navegar por el sistema de archivos para leer y escribir archivos. Una operación habitual es obtener el directorio de trabajo actual, que suele abreviarse como CWD.
Python tiene dos módulos principales que pueden utilizarse para acceder a las rutas del sistema de archivos: elmóduloos y el módulo pathlib.
El módulo os ofrece el enfoque tradicional para obtener el directorio de trabajo actual y trabaja con rutas y el sistema de archivos.
pathlib es un módulo más reciente que ofrece un enfoque orientado a objetos, robusto y multiplataforma.
En este tutorial, exploro las distintas técnicas para obtener y manipular el directorio de trabajo actual. Si quieres saber más sobre Python, no dudes en explorar otras entradas de mi blog:
Pitón: Cómo obtener el Directorio de Trabajo Actual (CWD)
El directorio de trabajo actual es el directorio en el que se ejecuta un programa Python. Sirve como punto de referencia para las rutas relativas de los archivos y permite al programa acceder a archivos y recursos dentro de la jerarquía de directorios.
Veamos cómo acceder al directorio de trabajo actual utilizando los módulos os y pathlib y comparemos las dos soluciones.
Utilizando os.getcwd()
El módulo os permite acceder al sistema operativo del ordenador. La función getcwd() obtiene el directorio de trabajo actual:
La salida muestra la ruta del directorio que contiene el script. El formato de la ruta depende del sistema operativo. La salida anterior es para sistemas operativos POSIX como Linux, Unix y macOS.
La misma ruta en un sistema Windows se mostraría así:
Por lo tanto, tenemos que utilizar métodos de cadena y otras operaciones de cadena para tratar este camino.
Utilizando pathlib.Path.cwd()
Python 3.4 introdujo el módulo pathlib, que ofrece un enfoque orientado a objetos para acceder y manipular rutas de archivos. La clase principal de pathlib es Path, que podemos importar antes de obtener el directorio de trabajo actual:
La salida impresa de Path.cwd() tiene un aspecto similar al valor devuelto por os.getcwd(). Sin embargo, Path.cwd() no devuelve una cadena. Podemos confirmarlo imprimiendo el tipo del objeto devuelto o mostrando su representación oficial en cadena mediante repr():
<class 'pathlib.PosixPath'>
PosixPath('/Users/sg/Documents/GitHub/datacamp')Con la tecnología de
En un ordenador Windows, Path.cwd() devuelve un objeto WindowsPath.
Los objetos PosixPath y WindowsPath proporcionan una funcionalidad similar para permitir programas multiplataforma. Estos son algunos de los atributos de estos objetos:
Siempre que sea posible, es preferible utilizar el módulo pathlib, que es más moderno y facilita el manejo de las rutas. Puedes leer esta guía completa sobre el uso de pathlib en Python si quieres saber más.
Trabajar con el directorio actual
Los programas Python a menudo necesitan manipular la ruta, por ejemplo, para guardar un archivo en una subcarpeta. Supongamos que necesitamos crear un nuevo subdirectorio en nuestro directorio de trabajo actual y guardar un archivo de texto en la nueva carpeta.
Utilizando la os módulo
La función getcwd() del módulo os devuelve una cadena. Por tanto, es posible alterar manualmente esta cadena para modificar la ruta. Sin embargo, las modificaciones necesarias varían en función del sistema operativo, ya que los distintos sistemas tienen formatos de ruta diferentes. Una opción mejor es utilizar os.path.join():
import os
cwd = os.getcwd()
output_path = os.path.join(cwd,"testing_os")print(output_path)Con la tecnología de
La ruta que devuelve os.path.join() tiene el formato correcto para el sistema operativo utilizado. Devuelve una cadena con la nueva ruta. Podemos comprobar si esta subcarpeta existe con os.path.exists(), que devuelve un booleano:
Esto demuestra que la ruta representada por output_path aún no existe. El módulo os proporciona herramientas para crear esta carpeta. La función os.mkdir() crea un nuevo directorio:
Ahora existe la nueva subcarpeta y se pueden guardar nuevos archivos en ella:
output_file = os.path.join(output_path,"test.txt")withopen(output_file,"w")asfile:file.write("Testing path modification with the 'os' module")Con la tecnología de
La variable output_file contiene el nombre del archivo de salida deseado con la ruta completa. Este archivo de texto se crea en la subcarpeta /testing_os dentro del directorio de trabajo actual.
También podemos listar todos los elementos de una carpeta utilizando os.listdir():
La función os.listdir() devuelve una lista con todos los elementos del directorio. Este código recorre esta lista para mostrar cada archivo o carpeta en una línea distinta. En este ejemplo, el directorio contiene un único archivo de texto.
Utilizando la pathlib módulo
El nuevo módulo pathlib también proporciona herramientas para crear nuevas rutas. Este módulo utiliza el operador de barra diagonal / para combinar elementos en una ruta. Es el mismo operador que se utiliza para la división de tipos de datos numéricos, pero también es el carácter utilizado en las rutas de archivos en los sistemas operativos POSIX. Vamos a crear una nueva ruta y a comprobar que no existe ya:
from pathlib import Path
cwd = Path.cwd()
output_path = cwd /"testing_pathlib"print(output_path)print(Path.exists(output_path))Con la tecnología de
/Users/sg/Documents/GitHub/datacamp/testing_pathlib/test.txtCon la tecnología de
Como ocurre con otras herramientas de pathlib, el valor devuelto no es una cadena. En su lugar, es un objeto PosixPath o WindowsPath. Podemos utilizar el atributo .name para mostrar el nombre del archivo o carpeta sin la ruta completa:
Mientras que os.listdir() devuelve una lista, pathlib.Path.iterdir() devuelve un objeto generator (puedes leer este tutorial sobre Iteradores y generadores de Python si necesitas un repaso):
Este comportamiento sigue las mejores prácticas del Python moderno, ya que los iteradores y generadores son más eficientes en determinadas situaciones.
Cambiar el directorio de trabajo actual (CWD)
También es posible cambiar el directorio de trabajo actual directamente desde dentro de un programa Python utilizando os.chdir(). Como no se trata de una operación directamente relacionada con la ruta, no existe una versión alternativa en pathlib. Sin embargo, podemos seguir utilizando objetos pathlib.Path como argumentos:
import os
from pathlib import Path
cwd = Path.cwd()print(cwd)
os.chdir(cwd.parent)
cwd = Path.cwd()print(cwd)Con la tecnología de
/Users/sg/Documents/GitHub/datacamp
/Users/sg/Documents/GitHubCon la tecnología de
El directorio de trabajo ha cambiado. También podemos utilizar cwd.parent.resolve() para asegurarnos de que los enlaces simbólicos se tratan correctamente. El argumento en os.chdir() también puede ser una cadena, como las rutas devueltas por las funciones del módulo os.
Hay que tener cuidado al cambiar el directorio de trabajo dentro de un programa para asegurarse de que no se producen comportamientos inesperados.
Buenas prácticas y consejos
Aquí tienes algunas buenas prácticas y consejos para trabajar con rutas en Python:
Conclusión
Navegar y manipular rutas de archivos es un requisito habitual en muchos programas Python. El módulo os proporciona las funciones tradicionales para manejar estas tareas, mientras que el módulo pathlib ofrece un enfoque más moderno, orientado a objetos. Utilizar pathlib no sólo simplifica muchas operaciones, sino que también garantiza que tu código siga siendo multiplataforma y más fácil de leer.
Tanto si mantienes una base de código existente que utiliza os como si empiezas un nuevo proyecto en el que puedes aprovechar pathlib, comprender ambos módulos y sus capacidades te dará la flexibilidad y confianza necesarias para gestionar las rutas en cualquier proyecto Python.
Puedes continuar tu viaje de aprendizaje de Python con estos cursos:
Estudié Física y Matemáticas a nivel UG en la Universidad de Malta. Después me trasladé a Londres y me doctoré en Física en el Imperial College. Trabajé en novedosas técnicas ópticas para obtener imágenes de la retina humana. Ahora, me centro en escribir sobre Python, comunicar sobre Python y enseñar Python.
Aprende a instalar Python en tu equipo personal con este tutorial paso a paso. Tanto si eres usuario de Windows como de macOS, descubre varios métodos para iniciarte en Python en tu equipo.
Descubre cómo aprender Python en 2026, sus aplicaciones y la demanda de conocimientos de Python. Comienza hoy mismo tu aventura con Python. con nuestra guía completa.
Aprende a crear e importar módulos de Python. ¡Descubre las mejores prácticas, ejemplos y consejos para escribir código Python reutilizable, organizado y eficiente!
Aprenda cómo puede ejecutar un script Python desde la línea de comandos, y también cómo puede proporcionar argumentos de línea de comandos a su script.
Muchos programas Python necesitan navegar por el sistema de archivos para leer y escribir archivos. Una operación habitual es obtener el directorio de trabajo actual, que suele abreviarse como CWD.
Python tiene dos módulos principales que pueden utilizarse para acceder a las rutas del sistema de archivos: elmódulo
osy el módulopathlib.El módulo
osofrece el enfoque tradicional para obtener el directorio de trabajo actual y trabaja con rutas y el sistema de archivos.pathlibes un módulo más reciente que ofrece un enfoque orientado a objetos, robusto y multiplataforma.En este tutorial, exploro las distintas técnicas para obtener y manipular el directorio de trabajo actual. Si quieres saber más sobre Python, no dudes en explorar otras entradas de mi blog:
Pitón: Cómo obtener el Directorio de Trabajo Actual (CWD)
El directorio de trabajo actual es el directorio en el que se ejecuta un programa Python. Sirve como punto de referencia para las rutas relativas de los archivos y permite al programa acceder a archivos y recursos dentro de la jerarquía de directorios.
Veamos cómo acceder al directorio de trabajo actual utilizando los módulos
osypathliby comparemos las dos soluciones.Utilizando
os.getcwd()El módulo
ospermite acceder al sistema operativo del ordenador. La funcióngetcwd()obtiene el directorio de trabajo actual:La salida muestra la ruta del directorio que contiene el script. El formato de la ruta depende del sistema operativo. La salida anterior es para sistemas operativos POSIX como Linux, Unix y macOS.
La misma ruta en un sistema Windows se mostraría así:
El valor devuelto por
os.getcwd()es una cadena:Por lo tanto, tenemos que utilizar métodos de cadena y otras operaciones de cadena para tratar este camino.
Utilizando
pathlib.Path.cwd()Python 3.4 introdujo el módulo
pathlib, que ofrece un enfoque orientado a objetos para acceder y manipular rutas de archivos. La clase principal depathlibesPath, que podemos importar antes de obtener el directorio de trabajo actual:La salida impresa de
Path.cwd()tiene un aspecto similar al valor devuelto poros.getcwd(). Sin embargo,Path.cwd()no devuelve una cadena. Podemos confirmarlo imprimiendo el tipo del objeto devuelto o mostrando su representación oficial en cadena medianterepr():En un ordenador Windows,
Path.cwd()devuelve un objetoWindowsPath.Los objetos
PosixPathyWindowsPathproporcionan una funcionalidad similar para permitir programas multiplataforma. Estos son algunos de los atributos de estos objetos:Siempre que sea posible, es preferible utilizar el módulo
pathlib, que es más moderno y facilita el manejo de las rutas. Puedes leer esta guía completa sobre el uso de pathlib en Python si quieres saber más.Trabajar con el directorio actual
Los programas Python a menudo necesitan manipular la ruta, por ejemplo, para guardar un archivo en una subcarpeta. Supongamos que necesitamos crear un nuevo subdirectorio en nuestro directorio de trabajo actual y guardar un archivo de texto en la nueva carpeta.
Utilizando la
osmóduloLa función
getcwd()del móduloosdevuelve una cadena. Por tanto, es posible alterar manualmente esta cadena para modificar la ruta. Sin embargo, las modificaciones necesarias varían en función del sistema operativo, ya que los distintos sistemas tienen formatos de ruta diferentes. Una opción mejor es utilizaros.path.join():La ruta que devuelve
os.path.join()tiene el formato correcto para el sistema operativo utilizado. Devuelve una cadena con la nueva ruta. Podemos comprobar si esta subcarpeta existe conos.path.exists(), que devuelve un booleano:Esto demuestra que la ruta representada por
output_pathaún no existe. El móduloosproporciona herramientas para crear esta carpeta. La funciónos.mkdir()crea un nuevo directorio:Ahora existe la nueva subcarpeta y se pueden guardar nuevos archivos en ella:
La variable
output_filecontiene el nombre del archivo de salida deseado con la ruta completa. Este archivo de texto se crea en la subcarpeta/testing_osdentro del directorio de trabajo actual.También podemos listar todos los elementos de una carpeta utilizando
os.listdir():La función
os.listdir()devuelve una lista con todos los elementos del directorio. Este código recorre esta lista para mostrar cada archivo o carpeta en una línea distinta. En este ejemplo, el directorio contiene un único archivo de texto.Utilizando la
pathlibmóduloEl nuevo módulo
pathlibtambién proporciona herramientas para crear nuevas rutas. Este módulo utiliza el operador de barra diagonal/para combinar elementos en una ruta. Es el mismo operador que se utiliza para la división de tipos de datos numéricos, pero también es el carácter utilizado en las rutas de archivos en los sistemas operativos POSIX. Vamos a crear una nueva ruta y a comprobar que no existe ya:La clase
Pathtiene su propio método.mkdir()para crear un nuevo directorio:Como
output_pathes un objetoPosixPathoWindowsPath, podemos utilizar el operador de barra oblicua en cualquier lugar para crear una nueva ruta:El nuevo archivo de texto se crea en la carpeta
/testing_pathlib.Podemos utilizar el método
Path.iterdir()para iterar por cada elemento de una carpeta:Como ocurre con otras herramientas de
pathlib, el valor devuelto no es una cadena. En su lugar, es un objetoPosixPathoWindowsPath. Podemos utilizar el atributo.namepara mostrar el nombre del archivo o carpeta sin la ruta completa:Mientras que
os.listdir()devuelve una lista,pathlib.Path.iterdir()devuelve un objetogenerator(puedes leer este tutorial sobre Iteradores y generadores de Python si necesitas un repaso):Este comportamiento sigue las mejores prácticas del Python moderno, ya que los iteradores y generadores son más eficientes en determinadas situaciones.
Cambiar el directorio de trabajo actual (CWD)
También es posible cambiar el directorio de trabajo actual directamente desde dentro de un programa Python utilizando
os.chdir(). Como no se trata de una operación directamente relacionada con la ruta, no existe una versión alternativa enpathlib. Sin embargo, podemos seguir utilizando objetospathlib.Pathcomo argumentos:El directorio de trabajo ha cambiado. También podemos utilizar
cwd.parent.resolve()para asegurarnos de que los enlaces simbólicos se tratan correctamente. El argumento enos.chdir()también puede ser una cadena, como las rutas devueltas por las funciones del móduloos.Hay que tener cuidado al cambiar el directorio de trabajo dentro de un programa para asegurarse de que no se producen comportamientos inesperados.
Buenas prácticas y consejos
Aquí tienes algunas buenas prácticas y consejos para trabajar con rutas en Python:
Conclusión
Navegar y manipular rutas de archivos es un requisito habitual en muchos programas Python. El módulo
osproporciona las funciones tradicionales para manejar estas tareas, mientras que el módulopathlibofrece un enfoque más moderno, orientado a objetos. Utilizarpathlibno sólo simplifica muchas operaciones, sino que también garantiza que tu código siga siendo multiplataforma y más fácil de leer.Tanto si mantienes una base de código existente que utiliza
oscomo si empiezas un nuevo proyecto en el que puedes aprovecharpathlib, comprender ambos módulos y sus capacidades te dará la flexibilidad y confianza necesarias para gestionar las rutas en cualquier proyecto Python.Puedes continuar tu viaje de aprendizaje de Python con estos cursos: