ОС-агности c относительный путь с использованием pathlib - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть строковая переменная dirname, которая содержит путь с правильными косыми чертами ('/' если Linux, '\' если Windows).

И у меня есть относительное имя файла строка, которая может содержать неправильные слэши.

Как мне присоединиться к ним и получить правильное полное имя файла для ОС, где я запускаю скрипт, используя pathlib?

Например, работает на Linux:

dirname = '/users/myname/dir1'
filename1 = '..\\dir2\\file.txt'
filename2 = '../dir2/file.txt'

Я хочу присоединиться к dirname с filename1 или filename2 и получить /users/myname/dir2/file.txt в обоих случаях.

Работать на Windows:

dirname = 'C:\\dir1'
filename1 = '..\\dir2\\file.txt'
filename2 = '../dir2/file.txt'

Я хочу присоединиться к dirname с filename1 или filename2 и получить C:\\dir2\\file.txt в обоих случаях.

1 Ответ

0 голосов
/ 15 апреля 2020

Потенциальным решением было бы хранить только компоненты пути:

import pathlib

path_1 = pathlib.Path(r"/users/myname/dir1")
print(path_1)

path_list = ["dir2", "file.txt"]

path_2 = pathlib.Path(*path_list)
print(path_2)

res = path_1.joinpath(path_2)
print(res)

Вывод:

/users/myname/dir1
dir2/file.txt
/users/myname/dir1/dir2/file.txt

К сожалению, это не идеально, кажется, что пути к файлам могут получить довольно грязный См. Например кроссплатформенное разбиение пути в python. Этот ответ довольно аккуратный.

...