Python でのディレクトリ パスの操作
-
26-09-2019 - |
質問
基本的に、この現在の URL と、新しい URL にマージしたい他のキーを持っていますが、3 つの異なるケースがあります。
現在の URL が localhost:32401/A/B/foo であるとします。
キーが bar の場合、localhost:32401/A/B/bar を返したい
キーがスラッシュで始まり /A/bar の場合、localhost:32401/A/bar を返したい
最後に、キーが独自の独立したURLである場合は、そのキーを返したいだけです= http://foo.com/bar -> http://foo.com/bar
文字列を手動で操作せずに少なくとも最初の 2 つのケースを実行する方法はあると思いますが、os.path モジュールではすぐには何も思い浮かびませんでした。
解決
文字列を手動で操作せずに少なくとも最初の 2 つのケースを実行する方法はあると思いますが、os.path モジュールではすぐには何も思い浮かびませんでした。
それはあなたが使いたいからです urllib.parse
(Python 3.x の場合) または urlparse
(Python 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')
あなたの最初のケースと万一の助けます。
もちろん、あなたは常に残りのための基本的な文字列操作を行うことができます。
文字列はすべてそこにあなたを得ることができる必要がありSTARTSWITHとendswithメソッドを持っているPythonでオブジェクト。このような何か多分?
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)