سؤال

في الأساس ، لدي عنوان 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)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top