una rutas ruta relativas relativa qué ejercicios ejemplos ejemplo archivo acceso absolutas absoluta python windows unix path cross-platform

python - qué - rutas absolutas y relativas linux



Usando rutas unix absolutas en windows con python (3)

¿De la respuesta de Blenders a las rutas de archivos independientes de la plataforma?

os.path.exists(os.path.abspath(filePath))

Estoy creando una aplicación que almacena archivos blob en el disco duro, pero este script debe ejecutarse tanto en Linux como en Windows. El problema es que quiero darle una ruta absoluta desde la raíz del sistema de archivos y no una relativa a los archivos del proyecto. , esto es porque estoy usando git y no quiero tratar de excluir todos estos archivos de la sincronización.

Así que me gustaría tener algo como esto:

path = ''/var/lib/blob_files/'' file = open(path+''myfile.blob'', ''w'')

y obtener un archivo en Unix en:

/var/lib/blob_files/myfile.blob

y en ventanas a

C:/var/lib/blob_files/myfile.blob

también podría ser relativo a la carpeta de inicio del usuario (/ home / user en unix y C: / Users / User en windows) pero supongo que el problema es muy similar.

¿Cómo puedo conseguir esto? ¿Existe alguna biblioteca o función que pueda ayudarme de forma transparente a convertir estas rutas sin tener que preguntar en qué plataforma se ejecuta el script todo el tiempo?

De mis dos opciones, absoluta desde la raíz o relativa desde la carpeta de inicio, ¿cuál me recomienda usar?

Gracias de antemano por cualquier consejo sobre esto


Ok, tengo una respuesta por mi cuenta.

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

Tal vez sea de utilidad para cualquiera.


Use os.path.abspath() , y también os.path.expanduser() para archivos relacionados con el directorio de inicio del usuario:

print os.path.abspath("/var/lib/blob_files/myfile.blob") >>> C:/var/lib/blob_files/myfile.blob print os.path.abspath(os.path.expanduser("~/blob_files/myfile.blob")) >>> C:/Users/jerry/blob_files/myfile.blob

Estos "harán lo correcto" para las rutas de Windows y POSIX.

expanduser() no cambiará la ruta si no tiene un ~ , así que puedes usarla de manera segura con todas las rutas. Por lo tanto, puede escribir fácilmente una función de envoltorio:

import os def fixpath(path): return os.path.abspath(os.path.expanduser(path))

Tenga en cuenta que la letra de unidad utilizada será la unidad especificada por el directorio de trabajo actual del proceso de Python, generalmente el directorio en el que se encuentra su script (si se inicia desde el Explorador de Windows, y suponiendo que el script no lo cambie). Si quieres forzarlo a ser siempre C: puedes hacer algo como esto:

import os def fixpath(path): path = os.path.normpath(os.path.expanduser(path)) if path.startswith("//"): return "C:" + path return path