मेरे पास दो यूआरएल हैं:
url1 = "http://127.0.0.1/test1/test2/test3/test5.xml"
url2 = "../../test4/test6.xml"
मैं url2 के लिए एक पूर्ण url कैसे प्राप्त कर सकता हूं?
मेरे पास दो यूआरएल हैं:
url1 = "http://127.0.0.1/test1/test2/test3/test5.xml"
url2 = "../../test4/test6.xml"
मैं url2 के लिए एक पूर्ण url कैसे प्राप्त कर सकता हूं?
जवाबों:
आपको urlparse.urljoin का उपयोग करना चाहिए :
>>> import urlparse
>>> urlparse.urljoin(url1, url2)
'http://127.0.0.1/test1/test4/test6.xml'
पायथन 3 के साथ (जहाँ urlparse का नाम बदलकर urllib.parse रखा गया है ) आप इसे निम्नानुसार उपयोग कर सकते हैं :
>>> import urllib.parse
>>> urllib.parse.urljoin(url1, url2)
'http://127.0.0.1/test1/test4/test6.xml'
urljoin3 या मोड मापदंडों के साथ कैसे उपयोग करते हैं या आप इसके लिए कौन सी लाइब्रेरी की सलाह देते हैं?
/"रीसेट" और वापसी योजना + netloc + lasturl के साथ किसी भी पथ के रूप में :urlparse.urljoin('http://www.a.com/b/c/d', '/e') => 'http://www.a.com/e'
urljoin('http://www.a.com/', '../../b/c.png')परिणाम है 'http://www.a.com/../../b/c.png', लेकिन नहीं http://www.a.com/b/c.png। तो, क्या कोई विधि है http://www.a.com/b/c.png?
यदि आपके रिश्तेदार पथ में कई भाग होते हैं, तो आपको उन्हें अलग से जोड़ना urljoinहोगा , क्योंकि यह सापेक्ष पथ को बदल देगा, इसमें शामिल नहीं होगा। इसका उपयोग करने का सबसे आसान तरीका है posixpath।
>>> import urllib.parse
>>> import posixpath
>>> url1 = "http://127.0.0.1"
>>> url2 = "test1"
>>> url3 = "test2"
>>> url4 = "test3"
>>> url5 = "test5.xml"
>>> url_path = posixpath.join(url2, url3, url4, url5)
>>> urllib.parse.urljoin(url1, url_path)
'http://127.0.0.1/test1/test2/test3/test5.xml'
यह भी देखें: जब आप पायथन में एक यूआरएल का निर्माण कर रहे हैं, तो एक पथ के घटकों को कैसे शामिल किया जाए
es = ['http://127.0.0.1', 'test1', 'test4', 'test6.xml']
base = ''
map(lambda e: urlparse.urljoin(base, e), es)
reduce(lambda a, b: urlparse.urljoin(a, b), es) एक नक्शा list[n] - to -> list[n]ए कम हैlist[n] - to -> a calculated value
>>> from urlparse import urljoin
>>> url1 = "http://www.youtube.com/user/khanacademy"
>>> url2 = "/user/khanacademy"
>>> urljoin(url1, url2)
'http://www.youtube.com/user/khanacademy'
सरल।
आप reduceक्लीनर फैशन में शिखर की विधि को प्राप्त करने के लिए उपयोग कर सकते हैं ।
>>> import urllib.parse
>>> from functools import reduce
>>> reduce(urllib.parse.urljoin, ["http://moc.com/", "path1/", "path2/", "path3/"])
'http://moc.com/path1/path2/path3/'
ध्यान दें कि इस विधि के साथ, प्रत्येक टुकड़े में आगे-स्लेश का अनुगमन होना चाहिए, जिसमें कोई अग्रणी फ़ॉरवर्ड-स्लैश नहीं होना चाहिए (यह इंगित करने के लिए कि इसमें शामिल होने वाला पथ टुकड़ा है)। यह अधिक सही / सूचनात्मक है, आपको बता रहा है कि path1/एक यूआरआई पथ टुकड़ा है, और पूर्ण पथ /path1/या अज्ञात नहीं है path1, जो या तो हो सकता है (और पूर्ण पथ के रूप में माना जाता है)।
यदि आपको इसकी /कमी के लिए एक खंड में जोड़ना है, तो आप कर सकते हैं:
uri = uri if uri.endswith("/") else f"{uri}/"
URI संकल्प के बारे में अधिक जानने के लिए, विकिपीडिया के कुछ अच्छे उदाहरण हैं।
अपडेट करें
सिर्फ नोटिस पीटर पेरॉन ने शिखर के जवाब को कम करने के बारे में टिप्पणी की, लेकिन मैं इसे फिर से यहां दिखाता हूं कि यह कैसे किया जाता है।