2014-12-24 65 views
1

我正在開發一個python規範化的小實驗。我的主要目的是在URL末尾添加斜槓/(如果它尚不存在)。例如,如果它是http://www.example.com那麼它應該被轉換爲http://www.example.com/Python:添加尾部斜槓時的URL解析問題

這裏是相同的一個小片段:

if url[len(url)-1] != "/": 
     url = url + "/" 

但是,這也將轉換文件名。例如http://www.example.com/image.png分成http://www.example.com/image.png/這是錯誤的。我只想添加斜槓到目錄而不是文件名。我該怎麼做呢?

在此先感謝!

回答

0

你可以在最後一個子模式匹配檢查已知域vs文件擴展名。枚舉至少基本的top level domains並不難,例如.com,.gov,.org等。

如果您熟悉常規擴展,則可以使用像'.com$'這樣的模式進行匹配。

否則,您可以按'。'分隔。並檢查最後一個子你:

In [32]: url_png = 'http://www.example.com/image.png' 

In [33]: url_com = 'http://www.example.com' 

In [34]: domains = ['com', 'org', 'gov'] 

In [35]: for url in [url_png, url_com]: 
    ....:  suffix = url.split('.')[-1] 
    ....:  if suffix in domains: 
    ....:   print url 
    ....: 
http://www.example.com 

作爲一個方面說明,當你在上面的例子中看到的,你不需要做url[len(url)-1]索引列表的最後一個元素; Pythonic的方式只是url[-1]

+0

以及你的代碼段實際上解決了我關於這個問題的其他相關問題:) – hnvasa

0

您必須確保每當.進入URL時,對於目錄它應該在主機名中。如果在其他地方,它是一個文件名。 因此,對於這一點,只是做url.count('.')和檢查,如果這是不是在您的主機名的那些更大的(例如,在這裏它等於2)

if url.count('.') > 2: 
    url = url if url[-1] != '/' else url[:-1] 
else: 
    url = url if url[-1] == '/' else url + '/' 
+0

但可以有一個像'http:// www.example.com/1.2/1.3/1.4/index.html'這樣的有效網址:[link](http://stackoverflow.com/questions/6777274/ can-urls-contain-dots-in-the-path-part) – hnvasa

+0

這比我的回覆簡單得多,應該在大多數情況下工作,儘管你需要在http://之前選擇第一個子字符串。但我不認爲主機名僅限於單個子域...... – THK

+0

不僅子域會帶來額外的'.',而且網址路徑本身也允許點...這使得上述技術非常難以使用並且可能給出錯誤的結果... – hnvasa