Разделение URL в список в Python - PullRequest
2 голосов
/ 12 июля 2011

В настоящее время я работаю над проектом, который включает в себя разделение URL. Я использовал модуль urlparse, чтобы разбить URL, поэтому теперь я работаю только с сегментом пути.

Проблема в том, что когда я пытаюсь разбить () строку на основе разделителя "/" для разделения каталогов, я получаю пустые строки в моем списке.

Например, когда я делаю следующее:

import urlparse
url = "http://example/url/being/used/to/show/problem"
parsed = urlparse.urlparse(url)
path = parsed[2] #this is the path element

pathlist = path.split("/")

Я получаю список:

['', 'url', 'being', 'used', 'to', 'show', 'problem']

Я не хочу этих пустых строк. Я понимаю, что могу удалить их, создав новый список без них, но это выглядит неаккуратно. Есть ли лучший способ удалить пустые строки и слэши?

Ответы [ 5 ]

5 голосов
/ 12 июля 2011

Я не хочу эти пустые строки. Я понимаю, что могу удалить их, создав новый список без них, но это выглядит неаккуратно. Есть ли лучший способ удалить пустые строки и слэши?

Что? Есть только одна пустая строка, и она всегда первая по определению.

pathlist = path.split("/")[1:] 

Довольно часто встречается.


Конечная косая черта может означать «пустое» имя файла. В этом случае может подразумеваться имя по умолчанию (например, index.html)

Это может быть значимым.

"http://example/url/being/used/to/show/problem"

Имя файла "проблема"

"http://example/url/being/used/to/show/problem/"

Каталог является «проблемой», а имя файла по умолчанию подразумевается пустой строкой.

3 голосов
/ 12 июля 2011

Я не знаком с urllib и его выводом для пути, но думаю, что одним из способов формирования нового списка можно использовать понимание списка следующим образом:

[x for x in path.split("/") if x]

Или что-то подобное, если только ведущий '/':

path.lstrip('/').split("/")

Иначе, если трейлинг тоже:

path.strip('/').split("/")

И, по крайней мере, если ваша строка в пути всегда начинается с одного символа' / ', чем самый простой способ:1011 *

2 голосов
/ 12 июля 2011
pathlist = paths.strip('/').split("/")
1 голос
/ 12 июля 2011

Я добавил это как комментарий к комментарию, так что на всякий случай: Не могли бы вы использовать понимание списка, чтобы исключить пустые элементы, возвращаемые из разбиения, т.е.

path_list = [(p) for p in path.split('/') if len(p)]
1 голос
/ 12 июля 2011

удалить пустые предметы?

pathlist.remove('')
...