Я пытаюсь создать URL-адрес, объединив некоторые динамические компоненты. Я думал использовать что-то вроде os.path.join()
НО для URL-адресов в моем случае. Из исследования, которое я нашел, urlparse.urljoin()
делает то же самое. Тем не менее, похоже, что он принимает только два аргумента за один раз.Python: объединение нескольких компонентов для создания URL-адреса
У меня есть следующие до сих пор, который работает, но выглядит повторы:
a = urlparse.urljoin(environment, schedule_uri)
b = urlparse.urljoin(a, str(events_to_hours))
c = urlparse.urljoin(b, str(events_from_date))
d = urlparse.urljoin(c, str(api_version))
e = urlparse.urljoin(d, str(id))
url = e + '.json'
Выход = http://example.com/schedule/12/20160322/v1/1.json
указанных работ, и я попытался сделать его короче этот путь:
url_join_items = [environment, schedule_uri, str(events_to_hours),
str(events_from_date), str(api_version), str(id), ".json"]
new_url = ""
for url_items in url_join_items:
new_url = urlparse.urljoin(new_url, url_items)
Выход: http://example.com/schedule/.json
Но seco nd не работает. Пожалуйста, предложите мне, как исправить этот или лучший способ сделать это.
EDIT 1: Выход из reduce
решения выглядит следующим образом (к сожалению): Выход: http://example.com/schedule/.json
@idjaw: В моем случае я уже уверен, что хочу использовать 'urlparse', мне просто нужен более чистый и более короткий способ соединения более двух компонентов с одним и тем же адресом – summerNight
Почему это не работает? Мне кажется, что это очень хорошо. Какой результат и что с ним не так? Вероятно, вы захотите придерживаться строковой конкатенации для '.json', чтобы ваш URL-адрес не заканчивался на'/.json'. Кроме того, я не знаю, как это будет обрабатывать пустую строку, поэтому вы можете начать с 'new_url = url_join_items [0]', а затем перебрать 'url_join_items [1:] '. Но ответ с сокращением, вероятно, лучше. –
@AlexHall: Пожалуйста, см. Мой EDIT 1 и Вывод по каждому методу – summerNight