Cómo obtener, cambiar y listar el directorio actual en Python [Guía completa]

目次

1. Introducción

Al programar con Python, el concepto de «directorio actual (directorio de trabajo actual)» es extremadamente importante. El directorio actual se refiere al directorio (carpeta) en el que se ejecuta el programa, y sirve como lugar de referencia al leer y escribir archivos en Python.

Por ejemplo, si en un script de Python se especifica una ruta relativa como «data/sample.txt», buscará este archivo basándose en el directorio actual del script. Por lo tanto, si no se entiende correctamente el directorio actual, pueden ocurrir problemas como errores de archivo no encontrado o guardar datos en una carpeta no intencionada.

Ventajas de operar el directorio actual en Python

Obtener y cambiar el directorio actual en Python tiene las siguientes ventajas.

1. La lectura y escritura de archivos se vuelve más fluida

En muchos programas, es necesario leer y escribir archivos de datos o de configuración. Al gestionar adecuadamente el directorio actual, el script podrá obtener y guardar archivos en los lugares esperados.

2. Se pueden usar de manera adecuada rutas relativas y absolutas

En Python, las rutas de archivo se pueden especificar tanto con ruta relativa (data/sample.txt) como con ruta absoluta (C:/Users/username/project/data/sample.txt o /home/user/project/data/sample.txt). Si se comprende el directorio actual, será más fácil juzgar cuál método es apropiado.

3. La gestión del proyecto se vuelve más sencilla

En proyectos a gran escala, es común tener configuraciones de archivos que abarcan múltiples carpetas. Al ejecutar scripts de Python y cambiar el directorio actual, se puede lograr un comportamiento consistente incluso en diferentes entornos.

Lo que se puede aprender en este artículo

En este artículo, se explica en detalle cómo obtener, cambiar y listar el directorio actual en Python. Al aprender el siguiente contenido en orden, se puede mejorar las habilidades para manejar directorios en Python.

  • ¿Qué es el directorio actual?
  • Método para obtener el directorio actual
  • Método para cambiar el directorio actual
  • Método para obtener la lista de archivos en el directorio actual
  • Método para obtener el directorio donde se encuentra el script de Python
  • Preguntas frecuentes (FAQ) y sus soluciones

Resumen

La gestión de directorios en Python es un conocimiento esencial para las operaciones de archivos. Al leer este artículo, se profundizará la comprensión de las operaciones de directorios en Python, permitiendo un desarrollo de programas más fluido.

2. ¿Qué es el directorio actual?

Al manejar archivos con Python, es importante entender correctamente el concepto de directorio actual (directorio corriente). En esta sección, explicaremos en detalle la definición del directorio actual y su rol.

¿Qué es el directorio actual?

El directorio actual es la carpeta que el script de Python está utilizando actualmente como referencia para las operaciones. Cuando se ejecuta un programa de Python, las operaciones de archivos con rutas relativas se realizan basadas en este directorio actual.

Por ejemplo, consideremos un script de Python como el siguiente.

file_path = "data/sample.txt"

with open(file_path, "r") as file:
    content = file.read()

En este script, se utiliza la ruta relativa data/sample.txt. En este caso, Python buscará la ruta «directorio_actual/data/sample.txt». Es decir, el comportamiento del programa cambia dependiendo de dónde esté configurado el directorio actual.

El rol del directorio actual

El directorio actual afecta el entorno de ejecución del programa de Python, por lo que cumple roles importantes en los siguientes aspectos.

1. Sirve como referencia para rutas relativas

En Python, al especificar la ruta de un archivo, hay dos métodos: ruta relativa y ruta absoluta.

  • Ruta relativa: Ruta basada en el directorio actual
    Ejemplo: data/sample.txt (acceso a sample.txt dentro de la carpeta data en el directorio actual)
  • Ruta absoluta: Ruta completa desde el directorio raíz
    Ejemplo: C:/Users/username/project/data/sample.txt (Windows)
    Ejemplo: /home/user/project/data/sample.txt (Linux/Mac)

Si se entiende correctamente el directorio actual, se puede utilizar adecuadamente las rutas relativas, mejorando la portabilidad del script.

2. Permite gestionar el entorno de ejecución del script

El directorio actual puede variar dependiendo del entorno en el que se ejecuta el script de Python. Por ejemplo, puede cambiar en situaciones como las siguientes.

Método de ejecuciónEjemplo de directorio actual
Ejecución en línea de comandosC:/Users/username/project/
Ejecución en VSCode o PyCharmDirectorio raíz del proyecto
Ejecución en Jupyter NotebookDirectorio donde está el archivo del Notebook
Cambio usando os.chdir()Posible cambiar a cualquier directorio con os.chdir("/new/path/")

Si se entiende correctamente el comportamiento del directorio actual, se puede prevenir errores de lectura de archivos no intencionales y inconsistencias en el comportamiento del script.

3. Facilita la gestión del proyecto

En proyectos de Python, es común una estructura de carpetas como la siguiente.

/home/user/project/
    ├── main.py  # Script de ejecución
    ├── data/
    │   ├── sample.csv
    │   └── config.json
    ├── logs/
    │   ├── app.log
    └── src/
        ├── module1.py
        ├── module2.py

En una estructura de proyecto como esta, con una configuración adecuada del directorio actual, se puede realizar la lectura y escritura de archivos de manera fluida. Especialmente en proyectos grandes, es común unificar el directorio usando os.chdir().

Cómo verificar el directorio actual

En Python, para obtener el directorio actual, se puede usar os.getcwd() o Path.cwd().

Método usando el módulo os

import os

current_directory = os.getcwd()
print("Directorio actual:", current_directory)

Método usando el módulo pathlib (recomendado)

from pathlib import Path

current_directory = Path.cwd()
print("Directorio actual:", current_directory)

El módulo pathlib se introdujo en Python 3.4 y posteriores, y es un método orientado a objetos fácil de usar, por lo que se recomienda usarlo en nuevos proyectos.

Resumen

  • El directorio actual es la carpeta que sirve como referencia para el script de Python.
  • Es importante entender la diferencia entre rutas relativas y absolutas y usarlas adecuadamente.
  • Dado que el directorio actual cambia según el entorno de ejecución del script, es necesario gestionarlo conscientemente.
  • Usando os.getcwd() o Path.cwd(), se puede verificar el directorio actual.

3. Cómo obtener el directorio actual

Hay varias formas de obtener el directorio actual en Python, pero principalmente se utilizan los dos módulos os módulo y pathlib módulo. En esta sección, explicaremos en detalle cada método y compararemos las diferencias.

¿Qué significa obtener el directorio actual?

Al obtener el directorio actual (directorio de trabajo actual), se puede verificar en qué carpeta el script de Python está operando los archivos como referencia. Esto es esencial para gestionar correctamente la lectura y escritura de archivos y el entorno de ejecución del script.

Por ejemplo, es importante saber qué directorio se reconoce como el directorio actual al ejecutar un script de Python como el siguiente.

file_path = "data/sample.txt"

with open(file_path, "r") as file:
    content = file.read()

Dependiendo de dónde se ejecute este script, la ubicación de data/sample.txt puede cambiar. Por lo tanto, es importante comprender claramente el directorio actual.

1. Obtención del directorio actual usando el módulo os

Usando el módulo integrado de Python os, se puede obtener fácilmente el directorio actual.

✅ Usar os.getcwd()

import os

current_directory = os.getcwd()
print("Directorio actual:", current_directory)

✅ Ejemplo de salida (Windows)

Directorio actual: C:Usersusernameproject

✅ Ejemplo de salida (Mac/Linux)

Directorio actual: /home/user/project

Puntos

  • os.getcwd() devuelve una ruta absoluta (ruta completa), por lo que es fácil verificar el directorio actual.
  • Está incluido en la biblioteca estándar de Python os, por lo que no se necesita instalación adicional.

2. Obtención del directorio actual usando el módulo pathlib

Desde Python 3.4 en adelante, se recomienda obtener el directorio actual usando el módulo pathlib. Esto se debe a que proporciona una gestión de rutas de archivos orientada a objetos.

✅ Usar Path.cwd()

from pathlib import Path

current_directory = Path.cwd()
print("Directorio actual:", current_directory)

✅ Ejemplo de salida

Directorio actual: /home/user/project

Puntos

  • Path.cwd() devuelve la ruta absoluta del directorio actual de la misma manera que os.getcwd().
  • Usar un objeto Path hace que las operaciones de ruta sean más intuitivas y fáciles de manejar (es conveniente combinarlo con operaciones de archivos usando Path).
  • El módulo pathlib se introdujo en Python 3.4, por lo que no se puede usar en Python 2.

3. Comparación entre os.getcwd() y Path.cwd()

Es posible que te preguntes cuál usar entre os.getcwd() y Path.cwd(). Al comparar sus características, se obtiene lo siguiente.

Aspectoos.getcwd()Path.cwd()
Tipo de valor de retornoCadena (str)Objeto Path
SimplicidadSimple y fácil de manejarOrientado a objetos intuitivo
Entorno recomendadoCódigo legado o entornos de Python 2Proyectos nuevos en Python 3.4 o posterior
Operaciones de rutaos.path.join() etc. funciones utilizadasPath métodos del objeto utilizados
EscalabilidadSe puede unificar con métodos tradicionalesFácil de combinar con las funciones de pathlib

Conclusión

  • Proyectos nuevos → Path.cwd() (recomendado)
  • Necesidad de compatibilidad con código antiguo → os.getcwd()

4. Precauciones al obtener el directorio actual

  1. En Jupyter Notebook, la variable __file__ no se puede usar
  • os.getcwd() y Path.cwd() funcionan sin problemas, pero intentar obtener el directorio actual usando __file__ causará un error.
  1. El directorio actual difiere según el entorno de ejecución en la línea de comandos
  • El directorio actual puede diferir dependiendo del entorno en el que se ejecute el script de Python.
  • Por ejemplo, el directorio actual puede diferir entre la terminal de VSCode y el símbolo del sistema de Windows.
  1. Al cambiar con os.chdir(), el valor de os.getcwd() cambia
  • Si se cambia el directorio actual, los resultados posteriores de os.getcwd() cambiarán, por lo que es necesario tener precaución para evitar comportamientos no deseados.

Resumen

  • Hay dos métodos para obtener el directorio actual en Python: os.getcwd() y Path.cwd().
  • El método tradicional os.getcwd() es simple, fácil de usar y altamente compatible.
  • Path.cwd() forma parte del módulo pathlib y es adecuado para operaciones de ruta orientadas a objetos.
  • Se recomienda Path.cwd() para proyectos nuevos.
  • Es necesario prestar atención a las diferencias de comportamiento en Jupyter Notebook o en diferentes entornos de ejecución.

4. Cómo cambiar el directorio actual

En Python, es posible cambiar el directorio actual (directorio de trabajo actual). Es útil cuando se desea operar archivos en una carpeta específica o preparar el entorno de ejecución de un script. En esta sección, se explica cómo cambiar el directorio actual y los puntos de atención.

1. os.chdir() Cambio del directorio actual usando

Para cambiar el directorio actual, use el módulo os os.chdir().

✅ Uso básico de os.chdir()

import os

# Mostrar el directorio actual actual
print("Directorio actual antes del cambio:", os.getcwd())

# Cambiar el directorio actual
os.chdir("/path/to/new/directory")  # Especificar el directorio a cambiar

# Mostrar el directorio actual después del cambio
print("Directorio actual después del cambio:", os.getcwd())

✅ Resultado de la ejecución (confirmación antes y después del cambio)

Directorio actual antes del cambio: /home/user/project
Directorio actual después del cambio: /home/user/project/new_folder

Puntos

  • Usar os.chdir("ruta") permite cambiar el directorio de trabajo durante la ejecución del script.
  • Después del cambio, todas las rutas relativas se procesan con respecto al nuevo directorio actual.

2. os.chdir() con rutas absolutas y relativas

Al cambiar el directorio con os.chdir(), se puede especificar ruta absoluta o ruta relativa.

✅ Usar ruta absoluta

os.chdir("/home/user/project/new_folder")  # Linux / Mac
os.chdir("C:Usersusernameprojectnew_folder")  # Windows
  • Al especificar la ruta completa, se puede cambiar de manera confiable en cualquier entorno.
  • Método recomendado.

✅ Usar ruta relativa

os.chdir("new_folder")  # Mover a "new_folder" dentro del directorio actual
os.chdir("../")  # Mover al directorio superior
os.chdir("../../")  # Mover a dos directorios superiores
  • Se puede cambiar con respecto al directorio actual actual, lo que aumenta la portabilidad del script.
  • Sin embargo, si el directorio actual no está claro, puede causar un comportamiento inesperado.

3. Manejo de errores de os.chdir()

Si el directorio especificado no existe, Python genera un FileNotFoundError. Para evitarlo, es bueno incluir un proceso para verificar la existencia del directorio de antemano.

✅ Ejemplo de manejo de errores

import os

new_directory = "/path/to/nonexistent/directory"

# Verificar si el directorio existe antes de cambiar
if os.path.exists(new_directory):
    os.chdir(new_directory)
    print("Se cambió el directorio actual:", os.getcwd())
else:
    print("Error: El directorio especificado no existe.")

✅ Resultado de la ejecución (cuando el directorio no existe)

Error: El directorio especificado no existe.

Puntos

  • Usar os.path.exists(ruta) para verificar de antemano si el directorio existe.
  • Si se especifica un directorio que no existe, se genera un FileNotFoundError, por lo que incluir manejo de excepciones puede prevenir errores.

4. Cómo restaurar el directorio actual

Después de cambiar el directorio actual, puede que desee volver al directorio original. Con los siguientes métodos, es posible recordar el directorio original y restaurarlo después del cambio.

✅ Guardar el directorio actual original

import os

# Guardar el directorio actual actual
original_directory = os.getcwd()

# Cambiar a otro directorio
os.chdir("/path/to/new/directory")
print("Directorio actual después del cambio:", os.getcwd())

# Volver al directorio original
os.chdir(original_directory)
print("Se restauró el directorio actual original:", os.getcwd())

✅ Resultado de la ejecución

Directorio actual después del cambio: /home/user/new_folder
Se restauró el directorio actual original: /home/user/project

Puntos

  • Si se guarda el directorio original con original_directory = os.getcwd() antes del cambio, se puede volver fácilmente con os.chdir(original_directory).
  • Al combinar múltiples scripts, olvidar el proceso de restauración puede causar operaciones de archivos inesperadas, así que tenga cuidado.

5. Prestar atención al alcance de influencia de os.chdir()

Al cambiar el directorio actual con os.chdir(), el directorio actual de todo el script de Python se cambia, lo que puede causar influencias inesperadas.

✅ Ejemplo: Problema después de cambiar el directorio actual

import os

# Cambiar a otro directorio
os.chdir("/path/to/new/directory")

# Si otros scripts dependen del directorio actual
with open("config.json", "r") as file:
    config = file.read()  # Puede ocurrir un error inesperado

Este código, debido al cambio del directorio actual, puede buscar en un lugar diferente al de la carpeta donde originalmente debería estar config.json. Por lo tanto, es necesario prestar atención al comportamiento después de cambiar el directorio actual.

Resumen

  • Se puede cambiar el directorio actual usando os.chdir().
  • Es seguro usar rutas absolutas al cambiar, pero también se pueden aprovechar rutas relativas.
  • Incluir manejo de errores para no cambiar a directorios que no existen.
  • Al guardar el directorio actual original, se puede restaurar fácilmente.
  • El cambio del directorio actual afecta todo el script, por lo que es necesario prestar atención a errores inesperados.
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

5. Cómo obtener la lista de archivos en el directorio actual

En Python, es posible obtener la lista de archivos y carpetas en el directorio actual. De esta manera, puedes enumerar archivos de tipos específicos o procesar archivos en el directorio de manera masiva.

En esta sección, se explica en detalle cómo obtener la lista de archivos utilizando el módulo os y el módulo pathlib.

1. Obtención de la lista de archivos usando os.listdir()

El módulo os de Python incluye la función os.listdir() para obtener la lista de archivos y carpetas en un directorio.

✅ Uso básico de os.listdir()

import os

# Obtener archivos y carpetas en el directorio actual
files_and_folders = os.listdir()

print("Contenido del directorio actual:", files_and_folders)

✅ Resultado de ejecución (ejemplo)

Contenido del directorio actual: ['file1.txt', 'file2.csv', 'images', 'script.py']

Puntos clave

  • os.listdir() obtiene no solo archivos, sino también carpetas.
  • La lista obtenida incluye nombres de archivos con extensiones, por lo que es necesario filtrar los archivos.

2. Obtención solo de archivos con os.listdir()

Al usar os.listdir(), se obtienen todos los elementos del directorio (tanto archivos como carpetas). Sin embargo, si deseas obtener solo archivos específicos, puedes combinarlo con os.path.isfile() para extraer solo archivos.

✅ Método para obtener solo archivos

import os

# Obtener solo archivos en el directorio actual
files = [f for f in os.listdir() if os.path.isfile(f)]

print("Archivos en el directorio actual:", files)

✅ Resultado de ejecución (ejemplo)

Archivos en el directorio actual: ['file1.txt', 'file2.csv', 'script.py']

Puntos clave

  • Usando os.path.isfile(f), se excluyen las carpetas y se extraen solo los archivos.
  • Al usar la notación de comprensión de listas, se puede describir de manera concisa.

3. Obtención de archivos con extensiones específicas usando os.listdir()

Al obtener archivos en un directorio, puede que desees enumerar solo archivos con extensiones específicas (por ejemplo, .txt o .csv). En ese caso, puedes filtrar por extensión utilizando la notación de comprensión de listas.

✅ Obtención solo de archivos .txt

import os

# Obtener solo archivos .txt en el directorio actual
txt_files = [f for f in os.listdir() if f.endswith('.txt')]

print("Lista de archivos .txt:", txt_files)

✅ Resultado de ejecución (ejemplo)

Lista de archivos .txt: ['file1.txt', 'notes.txt']

Puntos clave

  • Usando f.endswith('.txt'), se extraen solo los archivos que terminan en .txt.
  • Se puede aplicar a otras extensiones como '.csv' o '.log'.

4. Obtención de la lista de archivos usando pathlib

Desde Python 3.4, puedes obtener la lista de archivos usando el módulo pathlib. Dado que pathlib permite operaciones de ruta orientadas a objetos, puedes obtener archivos en el directorio de manera más intuitiva.

✅ Obtención de la lista de archivos usando Path.iterdir()

from pathlib import Path

# Obtener archivos y carpetas en el directorio actual
files_and_folders = list(Path.cwd().iterdir())

print("Contenido del directorio actual:", files_and_folders)

✅ Resultado de ejecución (ejemplo)

Contenido del directorio actual: [PosixPath('file1.txt'), PosixPath('file2.csv'), PosixPath('images'), PosixPath('script.py')]

Puntos clave

  • Usando Path.cwd().iterdir(), se obtienen los elementos del directorio actual como objetos Path.
  • Al convertir a forma de lista, se facilita el manejo.

5. Obtención solo de archivos con pathlib

Usando Path.iterdir(), también puedes obtener solo archivos de manera sencilla.

✅ Método para obtener solo archivos

from pathlib import Path

# Obtener solo archivos en el directorio actual
files = [f for f in Path.cwd().iterdir() if f.is_file()]

print("Archivos en el directorio actual:", files)

✅ Resultado de ejecución (ejemplo)

Archivos en el directorio actual: [PosixPath('file1.txt'), PosixPath('file2.csv'), PosixPath('script.py')]

Puntos clave

  • Usando f.is_file(), se excluyen las carpetas y se obtienen solo archivos.
  • Al manejar objetos Path, se pueden operar las rutas de archivos de manera sencilla.

6. Comparación entre os.listdir() y pathlib

MétodoCaracterísticasUsos recomendados
os.listdir()Simple y rápidoCuando se prioriza la compatibilidad
os.path.isfile()Obtener solo archivosos.listdir() y usarlo en combinación
Path.iterdir()Orientado a objetos e intuitivopathlib al usarlo

Conclusión

  • Código legado → os.listdir() (simple y rápido)
  • Nuevo proyecto → pathlib.Path().iterdir() (orientado a objetos y fácil de usar)

Resumen

  • Usando os.listdir(), puedes obtener fácilmente archivos y carpetas en el directorio actual.
  • Usando os.path.isfile(), puedes excluir carpetas y obtener solo archivos.
  • Usando pathlib.Path().iterdir(), puedes realizar operaciones de ruta orientadas a objetos y manejar archivos de manera más intuitiva.

En la siguiente sección, se explica en detalle «Cómo obtener el directorio del script en ejecución».

6. Cómo obtener el directorio del script en ejecución

Obtener en qué directorio está ubicado un script de Python es importante para la lectura de archivos externos y el procesamiento dependiente de la ubicación del script. En esta sección, explicamos cómo obtener el directorio del script y cómo utilizarlo.

1. __file__ Variable utilizada para obtener el directorio del script

En Python, se puede obtener la ruta de archivo del script en ejecución utilizando la variable __file__. A partir de allí, utilizando os.path.dirname(), se puede obtener el directorio donde existe el script.

✅ Método básico de obtención utilizando __file__

import os

# Obtener la ruta absoluta del script
script_path = os.path.abspath(__file__)

# Obtener el directorio donde está ubicado el script
script_directory = os.path.dirname(script_path)

print("Ruta absoluta del script:", script_path)
print("Directorio de ubicación del script:", script_directory)

✅ Resultado de ejecución (ejemplo)

Ruta absoluta del script: /home/user/project/script.py
Directorio de ubicación del script: /home/user/project

Puntos clave

  • La variable __file__ es una variable especial que almacena la ruta de archivo del script de Python.
  • Utilizando os.path.abspath(__file__), se puede obtener la ruta absoluta del script.
  • Utilizando os.path.dirname(ruta), se puede obtener el directorio de ubicación del script.

Notas sobre el entorno de ejecución

  • __file__ no se puede utilizar en Jupyter Notebook.
  • __file__ solo se puede usar cuando existe un archivo de script, por lo que en Jupyter Notebook se produce un error.
  • En caso de ejecutar en Notebook, utilizar os.getcwd().

2. Obtención del directorio del script utilizando pathlib

En Python 3.4 y versiones posteriores, es posible obtener el directorio del script utilizando pathlib.

✅ Obtención del directorio del script utilizando pathlib

from pathlib import Path

# Obtener el directorio de ubicación del script
script_directory = Path(__file__).resolve().parent

print("Directorio de ubicación del script:", script_directory)

✅ Resultado de ejecución (ejemplo)

Directorio de ubicación del script: /home/user/project

Puntos clave

  • Path(__file__).resolve() obtiene la ruta absoluta del script.
  • Utilizando .parent, se puede obtener el directorio padre del script (carpeta de ubicación).
  • Dado que se puede escribir de manera intuitiva con orientación a objetos, se recomienda pathlib para nuevos proyectos.

Comparación entre os y pathlib

MétodoCaracterísticasUsos recomendados
os.path.dirname(os.path.abspath(__file__))Método tradicionalCuando se prioriza la compatibilidad
Path(__file__).resolve().parentOrientado a objetos e intuitivoProyectos nuevos en Python 3.4 y posteriores

3. Establecer el directorio del script como directorio actual

Al establecer el directorio de ubicación del script como directorio actual, es posible hacer que el script funcione de manera consistente en cualquier entorno.

✅ Cambio del directorio actual utilizando os.chdir()

import os

# Obtener el directorio de ubicación del script
script_directory = os.path.dirname(os.path.abspath(__file__))

# Establecer el directorio actual en la ubicación del script
os.chdir(script_directory)

print("Se estableció el directorio actual en la ubicación del script:", os.getcwd())

✅ Resultado de ejecución (ejemplo)

Se estableció el directorio actual en la ubicación del script: /home/user/project

Puntos clave

  • Utilizando os.chdir(directorio_del_script), se puede cambiar el directorio actual a la carpeta de ubicación del script.
  • Los programas que utilizan rutas relativas funcionarán correctamente sin importar dónde se ejecuten.

En Jupyter Notebook no se puede usar __file__, por lo que utilizar os.getcwd() en su lugar

import os

# En Jupyter Notebook, `__file__` no se puede usar, por lo que obtener directamente el directorio actual
script_directory = os.getcwd()
print("Directorio actual en Jupyter Notebook:", script_directory)

4. Ejemplos prácticos de uso del directorio del script

Al obtener el directorio del script, es posible cargar archivos de configuración o datos basados en la ubicación del script.

✅ Abrir un archivo basado en el directorio del script

import os

# Obtener el directorio de ubicación del script
script_directory = os.path.dirname(os.path.abspath(__file__))

# Establecer la ruta del archivo de datos (abrir "data.txt" en la misma carpeta que el script)
file_path = os.path.join(script_directory, "data.txt")

# Abrir el archivo
with open(file_path, "r") as file:
    content = file.read()

print("Contenido del archivo:", content)

✅ Resultado de ejecución (ejemplo)

Contenido del archivo: Este es el contenido del archivo dentro del directorio del script.

Puntos clave

  • Utilizando os.path.join(script_directory, "nombre_del_archivo"), se puede abrir archivos basados en la ubicación del script.
  • Dado que siempre se puede referir a archivos en el mismo directorio independientemente de la ubicación de ejecución del script, se mejora la portabilidad.

Resumen

  • Para obtener el directorio de ubicación del script, utilizar __file__.
  • En Python 3.4 y posteriores, utilizar pathlib.Path(__file__).resolve().parent es más intuitivo.
  • Utilizando os.chdir(), se puede establecer el directorio del script como directorio actual.
  • En Jupyter Notebook no se puede usar __file__, por lo que utilizar os.getcwd().
  • Al abrir archivos basados en el directorio del script, se puede escribir código con alta portabilidad.

7. Preguntas frecuentes (FAQ)

Explicamos en formato FAQ los puntos que los lectores probablemente se pregunten sobre cómo obtener, cambiar y operar el directorio actual en Python. A través de estas preguntas, puede profundizar en una comprensión más práctica.

Q1: ¿Cuál es la diferencia entre os.getcwd() y os.path.abspath('.')?

Respuesta

  • os.getcwd() obtiene el directorio actual en ruta absoluta.
  • os.path.abspath('.') también obtiene el directorio actual, pero devuelve la ruta absoluta del camino especificado como argumento (en este caso, ".").

Ejemplo de salida real

import os

print("os.getcwd():", os.getcwd())  
print("os.path.abspath('.'): ", os.path.abspath('.'))

Salida

os.getcwd(): /home/user/project
os.path.abspath('.'): /home/user/project
  • Para obtener el directorio actual de manera normal, se recomienda usar os.getcwd().

Q2: ¿Cambiar el directorio actual con os.chdir() afecta todo el script?

Respuesta

  • Sí, usar os.chdir() cambia el directorio actual de todo el proceso de Python.
  • Por lo tanto, si se cambia el directorio actual en medio del script, puede haber resultados no intencionados en la resolución de rutas de archivos.

Ejemplo de problema

import os

print("Antes del cambio:", os.getcwd())
os.chdir('/tmp')  # Cambiar el directorio
print("Después del cambio:", os.getcwd())

# Intentar abrir un archivo del directorio anterior puede causar un error
with open("config.json", "r") as file:
    content = file.read()

Solución

import os

original_directory = os.getcwd()  # Guardar el directorio original
os.chdir('/tmp')  # Cambiar temporalmente

# Ejecutar el procesamiento después del cambio

os.chdir(original_directory)  # Volver al directorio original
print("Volvimos al directorio original:", os.getcwd())
  • Si se cambia temporalmente el directorio actual, es una mejor práctica guardar el directorio original.

Q3: ¿Debería usar pathlib o os?

Respuesta

Aspectoos módulopathlib módulo
IntroducciónUsado desde hace mucho tiempoIntroducido desde Python 3.4
Facilidad de usoAlgo complejo (usar os.path.join(), etc.)Orientado a objetos e intuitivo (Path.cwd(), Path.joinpath(), etc.)
Operación de rutas de archivosBasado en cadenasPath objeto
ExtensibilidadAlta compatibilidadPermite un estilo moderno

Conclusión

  • En nuevos proyectos, se recomienda usar pathlib (fácil de escribir con orientación a objetos).
  • Si se necesita compatibilidad con Python 2, use el módulo os.

Q4: Al obtener la lista de archivos con os.listdir(), se mezclan carpetas y archivos. ¿Puedo obtener solo archivos?

Respuesta

Usando os.path.isfile(), puede excluir carpetas y obtener solo archivos.

Método para obtener solo archivos

import os

files = [f for f in os.listdir() if os.path.isfile(f)]
print("Archivos en el directorio actual:", files)

Si usa pathlib

from pathlib import Path

files = [f for f in Path.cwd().iterdir() if f.is_file()]
print("Archivos en el directorio actual:", files)
  • Usar pathlib resulta en código más intuitivo, por lo que se recomienda pathlib en nuevos proyectos.

Q5: Usar __file__ causa un error. ¿Por qué?

Respuesta

  • La variable __file__ solo se puede usar cuando el script de Python se ejecuta como archivo.
  • En Jupyter Notebook, la variable __file__ no está definida, por lo que ocurre un error.

Método alternativo en Jupyter Notebook

import os

script_directory = os.getcwd()  # Obtener el directorio actual
print("Directorio de Jupyter Notebook:", script_directory)
  • En Jupyter Notebook, obtener el directorio actual con os.getcwd() es una mejor práctica.

Q6: ¿Hay una manera de abrir archivos basados en el directorio del script sin usar os.chdir()?

Respuesta

  • Usar os.chdir() cambia todo el directorio actual, por lo que es un buen método especificar rutas de archivos basadas en el directorio del script.

Si usa os

import os

script_directory = os.path.dirname(os.path.abspath(__file__))
file_path = os.path.join(script_directory, "data.txt")

with open(file_path, "r") as file:
    content = file.read()

Si usa pathlib (recomendado)

from pathlib import Path

script_directory = Path(__file__).resolve().parent
file_path = script_directory / "data.txt"

with file_path.open("r") as file:
    content = file.read()
  • Desde Python 3.4, usar pathlib es más intuitivo y fácil de manejar.

Resumen

  • Entender la diferencia entre os.getcwd() y os.path.abspath('.') permite una operación más flexible del directorio actual.
  • Cambiar el directorio actual con os.chdir() afecta todo el script, por lo que se necesita precaución.
  • En nuevos proyectos desde Python 3.4, se recomienda usar pathlib.
  • En Jupyter Notebook, como __file__ no se puede usar, utilice os.getcwd().
  • Abrir archivos basados en el directorio del script permite escribir código con alta portabilidad.

8. Resumen

En este artículo, explicamos en detalle cómo obtener, cambiar y listar el directorio actual en Python. La manipulación de directorios en Python es un conocimiento esencial para la lectura y escritura de archivos y la gestión de scripts. Aquí, repasemos los puntos clave de cada sección.

1. ¿Qué es el directorio actual?

  • El directorio actual (directorio de trabajo) es la carpeta que sirve como referencia para el script de Python.
  • Las rutas relativas se especifican con respecto al directorio actual, por lo que si no se gestionan adecuadamente, se producirán errores de archivo no encontrado.

2. Cómo obtener el directorio actual

Usar el módulo os

import os
print(os.getcwd())  # Obtener el directorio actual actual

Usar el módulo pathlib (recomendado)

from pathlib import Path
print(Path.cwd())  # Obtener el directorio actual actual

Diferencias entre os.getcwd() y Path.cwd()

MétodoValor de retornoUsos recomendados
os.getcwd()Tipo cadena (str)Código legado · Compatibilidad con Python 2
Path.cwd()Objeto PathNuevos proyectos · Operaciones intuitivas con rutas

3. Cómo cambiar el directorio actual

Usar os.chdir()

import os
os.chdir("/new/directory")  # Cambiar el directorio actual
  • Al cambiar el directorio actual, el punto de referencia para las operaciones de archivos posteriores cambia, por lo que es necesario tener precaución.
  • Al guardar el directorio anterior, es posible volver a él.
original_directory = os.getcwd()
os.chdir("/new/directory")
os.chdir(original_directory)  # Volver al anterior

4. Obtener la lista de archivos en el directorio actual

Usar os.listdir()

import os
print(os.listdir())  # Obtener la lista de archivos y carpetas

Usar pathlib

from pathlib import Path
print(list(Path.cwd().iterdir()))  # Obtener la lista de archivos y carpetas
  • Cómo obtener solo extensiones específicas
txt_files = [f for f in Path.cwd().iterdir() if f.suffix == '.txt']
print(txt_files)  # Listar solo archivos .txt

5. Obtener el directorio del script en ejecución

Usar os

import os
print(os.path.dirname(os.path.abspath(__file__)))  # Obtener el directorio de ubicación del script

Usar pathlib (recomendado)

from pathlib import Path
print(Path(__file__).resolve().parent)  # Obtener el directorio de ubicación del script
  • En Jupyter Notebook, __file__ no se puede usar, por lo que en su lugar se usa os.getcwd().

6. Puntos de las preguntas frecuentes (FAQ)

  • os.getcwd() y os.path.abspath('.') ambos obtienen el directorio actual, pero es común usar os.getcwd().
  • Al cambiar el directorio con os.chdir(), afecta a todo el script, por lo que es necesario tener precaución.
  • Desde Python 3.4, se recomienda usar pathlib (fácil de usar con orientación a objetos).
  • Para obtener solo archivos de la lista obtenida con os.listdir(), usar os.path.isfile() o Path.is_file().
  • Al abrir archivos con respecto al directorio del script, es posible crear código con alta portabilidad.

7. Escenarios para aplicar este artículo

  • Programas de Python que involucran operaciones de archivos (gestión de logs, análisis de datos, scraping, etc.).
  • Mejores prácticas para mejorar la portabilidad de los scripts.
  • Mejora de habilidades para entender y gestionar adecuadamente los impactos de los cambios de directorio.

8. Finalmente

El conocimiento para manipular el directorio actual en Python es útil en cualquier programa que realice operaciones de archivos. En particular, al entender cómo alternar entre os y pathlib, es posible escribir código más flexible.

Referencias

¡Use este artículo como referencia para dominar la manipulación de directorios en Python y aplíquelo en la práctica!🚀