{ "cells": [ { "metadata": { "collapsed": true }, "cell_type": "markdown", "source": [ "# Diferencias entre tipos de Paths en Python\n", "\n", "En Python, manejar rutas de archivos y directorios es fundamental para la **portabilidad**, **reproducibilidad** y **mantenimiento** de proyectos. Existen varios tipos de paths que se usan según el contexto y el sistema operativo. Este documento explica los principales tipos, sus diferencias y buenas prácticas.\n", "\n", "---\n", "\n", "## 1. Tipos de paths\n", "\n", "En Python podemos encontrarnos con distintos tipos de paths:\n", "\n", "1. **Absolute Path (Ruta absoluta)**\n", "2. **Relative Path (Ruta relativa)**\n", "3. **Home Path (Ruta del usuario)**\n", "4. **Current Working Directory (Directorio de trabajo actual)**\n", "\n", "---\n", "\n", "## 2. Absolute Path\n", "\n", "Una **ruta absoluta** indica la ubicación completa de un archivo o directorio en el sistema de archivos, comenzando desde la raíz del sistema.\n", "\n", "### 2.1 Ejemplo\n", "\n", "**Windows:**\n", "```\n", "C:\\Usuarios\\TuUsuario\\proyecto\\data\\datos.csv\n", "```\n", "\n", "**Linux / macOS:**\n", "```\n", "/home/tuusuario/proyecto/data/datos.csv\n", "```\n", "\n", "### 2.2 Ventajas\n", "\n", "- No depende del directorio actual del programa.\n", "- Útil para scripts de producción que requieren rutas fijas.\n", "- Evita errores de \"archivo no encontrado\" al ejecutar desde ubicaciones diferentes.\n", "\n", "### 2.3 Limitaciones\n", "\n", "- Poco portable entre diferentes sistemas o usuarios.\n", "- Difícil de mantener en proyectos que se comparten o versionan.\n", "\n", "---\n", "\n", "## 3. Relative Path\n", "\n", "Una **ruta relativa** indica la ubicación de un archivo **respecto a otro directorio**, normalmente el directorio actual del script o proyecto.\n", "\n", "### 3.1 Ejemplo\n", "\n", "```\n", "data/datos.csv\n", "../datos/entrada.csv\n", "./scripts/analisis.py\n", "```\n", "\n", "### 3.2 Ventajas\n", "\n", "- Portabilidad: funciona en diferentes sistemas mientras la estructura del proyecto sea la misma.\n", "- Facilita la organización de proyectos modulares.\n", "- Ideal para proyectos versionados en Git.\n", "\n", "### 3.3 Limitaciones\n", "\n", "- Depende del **directorio de trabajo actual** al ejecutar el script.\n", "- Puede generar errores si se ejecuta desde otra carpeta diferente a la esperada.\n", "\n", "---\n", "\n", "## 4. Home Path\n", "\n", "El **Home Path** hace referencia al directorio principal del usuario en el sistema operativo:\n", "\n", "- **Windows:** `C:\\Users\\TuUsuario`\n", "- **Linux / macOS:** `/home/tuusuario`\n", "\n", "### 4.1 Uso en Python\n", "\n", "```python\n", "from pathlib import Path\n", "\n", "home = Path.home()\n", "archivo = home / \"proyecto/data/datos.csv\"\n", "```\n", "\n", "### 4.2 Ventajas\n", "\n", "- Permite crear rutas portables para archivos de configuración o recursos del usuario.\n", "- Evita codificar rutas absolutas específicas de una máquina.\n", "\n", "---\n", "\n", "## 5. Current Working Directory (CWD)\n", "\n", "El **Current Working Directory** es el directorio desde donde se ejecuta el script. Puede diferir de la ubicación del archivo `.py`.\n", "\n", "### 5.1 Obtener CWD en Python\n", "\n", "```python\n", "import os\n", "cwd = os.getcwd()\n", "print(cwd)\n", "```\n", "\n", "o usando `pathlib`:\n", "\n", "```python\n", "from pathlib import Path\n", "cwd = Path.cwd()\n", "print(cwd)\n", "```\n", "\n", "### 5.2 Buenas prácticas\n", "\n", "- Combinar **CWD con rutas relativas** para acceder a archivos dentro del proyecto.\n", "- Evitar hardcodear rutas absolutas que dependan de un usuario o máquina específica.\n", "\n", "---\n", "\n", "## 6. Comparación resumida\n", "\n", "| Tipo de Path | Inicio | Dependencia | Portabilidad | Uso recomendado |\n", "|--------------|--------|------------|--------------|----------------|\n", "| Absolute Path | Raíz del sistema (`/` o `C:\\`) | No | Baja | Producción, scripts que no se mueven |\n", "| Relative Path | Directorio actual (`.` o `..`) | Sí | Alta | Proyectos versionados y portables |\n", "| Home Path | Directorio del usuario | No | Alta | Configuración y recursos del usuario |\n", "| CWD | Directorio donde se ejecuta el script | Sí | Media | Acceso a archivos relativos dentro del proyecto |\n", "\n", "---\n", "\n", "## 7. Buenas prácticas\n", "\n", "1. Usar **`pathlib`** en lugar de concatenar strings para rutas:\n", "```python\n", "from pathlib import Path\n", "ruta = Path(\"data\") / \"datos.csv\"\n", "```\n", "2. Evitar rutas absolutas en proyectos versionados.\n", "3. Utilizar rutas relativas respecto al directorio raíz del proyecto (`PROJECT_ROOT`):\n", "```python\n", "PROJECT_ROOT = Path(__file__).resolve().parent.parent\n", "archivo = PROJECT_ROOT / \"data\" / \"datos.csv\"\n", "```\n", "4. Para archivos de configuración o temporales del usuario, usar **Home Path**.\n", "5. Documentar claramente la estructura de carpetas y su relación con las rutas relativas.\n", "\n", "---\n", "\n", "## 8. Conclusión\n", "\n", "- Los **absolute paths** garantizan ejecución confiable pero reducen portabilidad.\n", "- Los **relative paths** son ideales para proyectos compartidos y versionados.\n", "- El **home path** permite acceder a recursos de usuario de manera portable.\n", "- El **CWD** es útil para scripts que deben trabajar con la estructura del proyecto, pero requiere control cuidadoso de la ubicación de ejecución.\n", "\n", "> Combinar correctamente estos tipos de rutas garantiza portabilidad, reproducibilidad y mantenimiento eficiente de proyectos Python.\n" ], "id": "9598ae1ff4445f62" }, { "metadata": {}, "cell_type": "code", "outputs": [], "execution_count": null, "source": "", "id": "3d491ed93f006478" } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.6" } }, "nbformat": 4, "nbformat_minor": 5 }