os.path.basename работает с URL-адресами, почему?

>>> os.path.basename('http://example.com/file.txt') 'file.txt' 

.. и я думал, что os.path.* работают только на локальных путях, а не на URL-адресах? Обратите внимание, что приведенный выше пример также выполнялся в Windows .. с аналогичным результатом.

5 Solutions collect form web for “os.path.basename работает с URL-адресами, почему?”

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

 $ python -c"import sys; import StringIO; x=StringIO.StringIO(); sys.stdout=x; import this; sys.stdout = sys.__stdout__; print x.getvalue().splitlines()[10][9:]" 

В окнах посмотрите исходный код: C: \ Python25 \ Lib \ ntpath.py

 def basename(p): """Returns the final component of a pathname""" return split(p)[1] 

os.path.split (в том же файле) просто разделите «\» (и далее еще)

Используйте источник Луки:

 def basename(p): """Returns the final component of a pathname""" i = p.rfind('/') + 1 return p[i:] 

Изменить (ответ на пояснения):

Он работает для URL-адресов случайно, вот и все. Из-за этого, использование его поведения можно считать запахом кода некоторыми.

Попытка «исправить» его (проверьте, не прошел ли путь передачи), также удивительно сложно

 www.google.com/test.php me@other.place.com/12 ./src/bin/doc/goto.c 

одновременно являются правильными именами путей и URL-адресами (относительными), так же как и http:/hello.txt (один /, и только в Linux, и это довольно глупо :)). Вы можете «исправить» его для абсолютных URL-адресов, но относительные будут работать. Обращение с одним специальным случаем по-другому является большим, нет в мире python.

Подводя итог: импортируйте это

Прямая косая черта также является допустимым разделителем пути в Windows.

Это просто, что в командной строке не принимаются пути, начинающиеся с символа /, потому что этот символ зарезервирован для переключателей args.

Зачем? Потому что это полезно для разбора URL-адресов, а также для локальных путей к файлам. Почему нет?

  • urlfetch перенаправлен в бесконечный цикл в python
  • Как я могу удалить URL-адрес?
  • Вызовите операционную систему для открытия URL-адреса?
  • Получение ошибки NoReverseMatch в django
  • Как перенаправить запрос на другой URL-адрес в python
  • Добавить параметры в заданный URL в Python
  • Сравнение двух URL-адресов в Python
  • URL-адреса, хранящиеся в базе данных для сайта Django
  • Python - лучший язык программирования в мире.