Правильное кодирование пути к файлу с помощью python

#python #url-encoding

#python #url-кодировка

Вопрос:

Я пытаюсь открыть файлы, получив путь из словаря. Некоторые имена файлов содержат запятые (,) и другие подобные символы, которые при использовании выдают ошибку «такой файл не найден»

Например, следующий путь к файлу не откроется: foo, bar.mp3

Если существуют символы, подобные запятым, то они должны быть закодированы как : foo, bar.mp3

Кто-нибудь может сказать мне, как это сделать?

Комментарии:

1. почему пробел представлен как , а не как запятая? Должна ли строка быть foo, bar.mp3 ?

2. Запятая на самом деле должна была быть ,. Но я анализирую XML-файл и сохраняю результаты в словаре. В XML-файле большинство путей закодированы, но был один файл с похожим шаблоном. Пробелы были закодированы, запятые — нет. Странно.

Ответ №1:

Вам может понадобиться pathname2url

Python 2.x (docs)

 >>> from urllib import pathname2url 
>>> pathname2url('foo, bar.mp3')
'foo, bar.mp3'
  

Python 3.x (docs)

 >>> from urllib.request import pathname2url
>>> pathname2url('foo, bar.mp3')
'foo, bar.mp3'
  

Комментарии:

1. Функция, похоже, находится в urllib.request ( docs.python.org/3/library /… ) теперь.

Ответ №2:

 from urllib import pathname2url
pathname2url('foo,bar.mp3')
  

Ответ №3:

Вы можете использовать urllib. Следующий пример, возможно, потребуется изменить, если вы используете Python 3.x, но общая идея та же:

 import urllib

encoded_filename = urllib.quote(filename)
f = open(encoded_filename)