2011-09-02 15 views
7

Eğer eksikse, 'http' şema adını verilen bir url dizesinin önüne eklemek istiyorum. Aksi halde, URL'yi yalnız bırakın, bu yüzden urlparse'nin bunu yapmanın doğru yolu olduğunu düşündüm. Ama ne zaman bir şema ve ne zaman url olursa olsun, şema ile alan arasında '//' yerine /// alırım. aslında benziyor böyleceurlparse.urlparse şemadan sonra 2 yerine 3 '/' döndürüyor

>>> t = urlparse.urlparse('www.example.com', 'http') 
>>> t.geturl() 
'http:///www.example.com' # three /// 

Nasıl bu url dönüştürebilirim:

'http://www.example.com' # two // 

cevap

4

Kısa cevap (ama totolojik biraz): senin örneğin kodunda

>>> urlparse.urlparse("http://www.example.com").geturl() 
'http://www.example.com' 

anabilgisayaradi ağ konumu olmayan bir yol olarak ayrıştırılır:

>>> urlparse.urlparse("www.example.com/go") 
ParseResult(scheme='', netloc='', path='www.example.com/go', params='', \ 
    query='', fragment='') 

>>> urlparse.urlparse("http://www.example.com/go") 
ParseResult(scheme='http', netloc='www.example.com', path='/go', params='', \ 
    query='', fragment='') 
+1

Görüyorum. Url ayrıştırmasının bir planın eksikliğini akıllıca belirleyeceği ve daha iyi bir şekilde yeniden inşa edeceği izlenimindeydim. Basitçe, url dizgisinin 'http: //' ile başlayıp başlamadığına ve buna göre eklenip eklenmediğine bakarak düzeltildi. –

+0

@Dan Holman Ben de bunu bekledim, ama bunun hakkında düşünürseniz, bunu gerçekten bekleyemezsiniz. "Images/tick.png" ifadesi tam bir URL değil, göreceli bir yol anlamına gelir. Urlparse ile "www.example.com" arasındaki farkı nasıl ayırt edebiliriz? Sadece bir alan adı gibi * göründüğü için geçerli bir yol olmadığı anlamına gelmez. – mgiuca

1

Eğer urlparse'yi kullanmak istediğiniz gibi kullanmak istiyorsanız, en yakın "doğru" eşdeğeri, urlstring olarak "//www.example.com" kullanmaktır. Böyle bir urlstring, bir düzeni olmayan kesin bir yoldur, bu yüzden varsayılan şema olarak "http" sağlayabilirsiniz. Bunu, URL'nizin "//" dizesini içerip içermediğini ve ön tarafa "//" harfi eklediğini tespit ederek yapabilirsiniz.

İlgili konular