Есть ли удобный способ сопоставить файл uri с os.path? - PullRequest
20 голосов
/ 12 мая 2011

Подсистема, которую я не контролирую, настаивает на предоставлении путей к файловой системе в форме URI. Существует ли модуль / функция python, который может преобразовать этот путь в соответствующую форму, ожидаемую файловой системой независимо от платформы?

Ответы [ 3 ]

21 голосов
/ 12 мая 2011

Модуль urlparse предоставляет путь из URI:

import os, urlparse
p = urlparse.urlparse('file://C:/test/doc.txt')
finalPath = os.path.abspath(os.path.join(p.netloc, p.path))
13 голосов
/ 24 февраля 2013

Для будущих читателей.Решение от @Jakob Bowyer не конвертирует символы URL в ascii.Немного покопавшись, я нашел это решение:

>>> import urllib, urlparse
>>> urllib.url2pathname(urlparse.urlparse('file:///home/user/some%20file.txt').path)
'/home/user/some file.txt'

РЕДАКТИРОВАТЬ:

Вот что я в итоге использовал:

>>> import urllib
>>> urllib.unquote('file:///home/user/some%20file.txt')[7:]
'/home/user/some file.txt'
0 голосов
/ 05 мая 2019

Решение от @ colton7909 в основном правильное и помогло мне получить этот ответ, но имеет некоторые ошибки импорта с Python 3. Это и я думаю, что это лучший способ справиться с частью 'file://' URL, чем просто отрубая первые 7 символов. Поэтому я считаю, что это самый идиоматичный способ сделать это с помощью стандартной библиотеки:

import urllib.parse
url_data = urllib.parse.urlparse('file:///home/user/some%20file.txt')
path = urllib.parse.unquote(url_data.path)

В этом примере должна появиться строка '/home/user/some file.txt'

...