معالجة مسارات الدليل في بيثون
-
26-09-2019 - |
سؤال
في الأساس ، لدي عنوان URL الحالي وهذا المفتاح الآخر الذي أريد دمجه في عنوان URL جديد ، ولكن هناك ثلاث حالات مختلفة.
لنفترض أن عنوان URL الحالي هو مضيف محلي: 32401/a/b/foo
إذا كان المفتاح شريطًا ، فأنا أريد إعادة LocalHost: 32401/A/B/BAR
إذا بدأ المفتاح بقطع مائل و/A/BAR ، فأنا أريد إعادة LocalHost: 32401/A/BAR
أخيرًا ، إذا كان المفتاح هو عنوان URL المستقل الخاص به ، فأنا فقط أريد إعادة هذا المفتاح = http://foo.com/bar -> http://foo.com/bar
أفترض أن هناك طريقة للقيام بحالتين على الأقل دون معالجة الأوتار يدويًا ، لكن لا شيء قفز في وجهي على الفور في وحدة OS.Path.
المحلول
أفترض أن هناك طريقة للقيام بحالتين على الأقل دون معالجة الأوتار يدويًا ، لكن لا شيء قفز في وجهي على الفور في وحدة OS.Path.
هذا لأنك تريد استخدامه urllib.parse
(لبيثون 3.x) أو urlparse
(لبيثون 2.x) بدلا من ذلك.
ليس لدي الكثير من الخبرة في ذلك ، لذلك ، إليك مقتطف باستخدام str.split()
و str.join()
.
urlparts = url.split('/')
if key.startswith('http://'):
return key
elif key.startswith('/'):
return '/'.join(urlparts[:2], key[1:])
else:
urlparts[len(urlparts) - 1] = key
return '/'.join(urlparts)
نصائح أخرى
هل قمت بفحص urlparse وحدة؟
من المستندات ،
from urlparse import urljoin
urljoin('http://www.cwi.nl/%7Eguido/Python.html', 'FAQ.html')
يجب أن تساعد في حالتك الأولى.
من الواضح ، يمكنك دائمًا القيام بمعالجة السلسلة الأساسية للباقي.
تحتوي كائنات السلسلة في Python على أساليب startswith و endwith التي يجب أن تكون قادرة على الوصول إلى هناك. شيء مثل هذا ربما؟
def merge(current, key):
if key.startswith('http'):
return key
if key.startswith('/'):
parts = current.partition('/')
return '/'.join(parts[0], key)
parts = current.rpartition('/')
return '/'.join(parts[0], key)