использование libpath в python для сопоставления файла из одной ОС в другую, и косые черты неверны - PullRequest
0 голосов
/ 20 марта 2020

У меня есть python скрипт, который работает с другой программой через API. Мне нужно отправить программе каталог файла. Проблема, с которой я столкнулся, заключается в том, что мне нужно учитывать возможную разницу в путях, если скрипт и программа находятся на разных машинах и / или ОС. Если скрипт и программа находятся на одной машине, это не проблема. Но если они находятся на разных компьютерах, компьютер со сценарием будет иметь сетевой путь:

script (подключенный сетевой диск): Z:\files\file.txt

программа: /mnt/user/disk1/files/file.txt

Таким образом, диск Z указывает на подключенный сетевой диск, к которому у программы есть доступ.

import pathlib

location = 'Z:\\files\\file.txt'
map_source = 'Z:\\'
map_destination = '/mnt/user/disk1/'
newpath=(location.replace(map_source, ''))
print(pathlib.PurePath(map_destination, newpath))

Поэтому, если я задаю сценарий Z:\files\file.txt в качестве входных данных, он должен удалить Z:\ из location и замените его на /mnt/user/disk1/ и верните /mnt/user/disk1/files/file.txt. Проблема в том, что он возвращается с неправильными косыми чертами:

\mnt\user\disk1\files\file.txt

Как я могу определить, какими должны быть правильные косые черты? Насколько я понимаю, PurePath будет делать правильный sla sh в зависимости от ОС, в которой запускается скрипт, но я могу запустить его на машине Windows и отправить путь на машину Linux. Я понимаю, что, возможно, я могу сделать это вручную с помощью регулярных выражений или чего-то еще, но есть ли способ с libpath или каким-то уже существующим модулем? Я не могу просто сказать, что конвертировать, я не знаю, какой системой будет пункт назначения. Я предполагаю, что это должно было бы проанализировать это и выяснить это.

1 Ответ

0 голосов
/ 20 марта 2020

Я понимаю, что, вероятно, могу сделать это вручную с помощью регулярного выражения или чего-то еще, но есть ли какой-нибудь способ с libpath или каким-то уже существующим модулем?

Использовать указанные подклассы c PurePath? PurePath отправляет между pathlib.PurePosixPath и pathlib.PureWindowsPath внутренне в зависимости от системы, на которой он запущен, но вы можете напрямую использовать эти подклассы, если знаете, что к чему.

Не то чтобы это сильно помогло, как я понимаю Не думаю, что между ними есть какой-то «мост»: PurePath (и его подклассы) могут принимать сегменты пути в качестве входных данных, но не возвращают сегменты пути.

Также обратите внимание, что ваши windows пути повреждены , \ является escape-символом в не необработанных строках python, поэтому, например, \f будет интерпретироваться как ASCII Formfeed (FF) .

...