¿Rutas de archivos independientes de la plataforma?

2 minutos de lectura

avatar de usuario
pelo

¿Cómo puedo usar un archivo dentro de la carpeta de mi aplicación en Python? Plataforma independiente por supuesto… algo similar a esto:

#!/bin/sh
mypath=${0%/*}
LIBDIR=$mypath/modules

avatar de usuario
Licuadora

Puedes usar os.path y sus funciones, que se encargan de las rutas específicas del sistema operativo:

>>> import os
>>> os.path.join('app', 'subdir', 'dir', 'filename.foo')
'app/subdir/dir/filename.foo'

En Windows, debería imprimirse con barras invertidas.

  • En realidad, imprime ‘app\\subdir\\dir\\filename.foo’ para mí.

    – multibuenverso

    11 de febrero de 2015 a las 9:52

  • @ArditS. Eso es porque necesita escapar de las barras diagonales inversas en las cadenas. si agregas printverás que print(os.path.join("foo", "bar", "baz")) de hecho imprime foo\bar\baz.

    – csl

    12 de agosto de 2015 a las 13:09


avatar de usuario
Aviraldg

import os
os.path.join(os.path.curdir, 'file.name')

o

import os
os.path.join(os.path.dirname(__file__), 'file.name')

dependiendo de si es un módulo (2) o un solo guión (1)y si lo está invocando desde el mismo directorio (1)o de otro diferente (2).

Editar

Mirando el “intento” que tiene en su pregunta, supongo que querría (1).

  • el uso de os.path.curdir fue muy útil para mí cuando navegué datos en mi proyecto +1

    –Brady Anderson

    30 abr a las 14:51

avatar de usuario
Eugene Yarmash

En Python 3.4+ puedes usar pathlib:

from pathlib import Path

libdir = Path(__file__).resolve().with_name('modules')

Cómo funciona: el __file__ El atributo contiene la ruta del archivo desde el que se cargó el módulo. Lo usas para inicializar un Path object , haga la ruta absoluta usando el resolve() y reemplace el componente de ruta final usando el método with_name() método.

__file__ contiene la ubicación del módulo. Utilice las funciones de os.path para extraer el directorio de él.

Pruebe esta forma compatible con CLR:

import os
AppDomain = type('', (object,), {'__init__': (lambda self: self.CurrentDomain = type('', (object,), {'__init__': (lambda self: self.BaseDirectory = os.path.split(__file__)[0])})())})()

Uso:

AppDomain.CurrentDomain.BaseDirectory

Inspirado por System.AppDomain en .NET Framework y Centro.

¿Sabes cómo funciona? En primer lugar, imports os. Después de eso, crea una variable llamada AppDomain que se establece en una instancia de un tipo donde su constructor establece su propio CurrentDomain a una instancia de un tipo donde su constructor establece su propio BaseDirectory al primer elemento de la matriz devuelta por os.path.split con el valor de __file__ (la ruta del módulo) como parámetro.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad