Pythonには変数base_dir
とfilename
. それらを連結して取得したいと思いfullpath
ます。しかし、ウィンドウの下では\
、 および for POSIXを使用する必要があります/
。
fullpath = "%s/%s" % ( base_dir, filename ) # for Linux
このプラットフォームを独立させるにはどうすればよいですか?
これにはos.path.join()を使用します。
文字列の連結などではなく、これを使用する利点は、パスの区切り記号など、さまざまな OS 固有の問題を認識していることです。例:
import os
Windows 7の場合:
base_dir = r'c:\bla\bing'
filename = r'data.txt'
os.path.join(base_dir, filename)
'c:\\bla\\bing\\data.txt'
Linuxの場合:
base_dir = '/bla/bing'
filename = 'data.txt'
os.path.join(base_dir, filename)
'/bla/bing/data.txt'
osモジュールには、ディレクトリ、パスの操作、およびos.sepを介してパスで使用される区切り記号などの OS 固有の情報を見つけるための多くの便利なメソッドが含まれています。
import os
path = os.path.join("foo", "bar")
path = os.path.join("foo", "bar", "alice", "bob") # More than 2 params allowed.
このためのヘルパー クラスを作成しました。
import os
class u(str):
"""
Class to deal with urls concat.
"""
def __init__(self, url):
self.url = str(url)
def __add__(self, other):
if isinstance(other, u):
return u(os.path.join(self.url, other.url))
else:
return u(os.path.join(self.url, other))
def __unicode__(self):
return self.url
def __repr__(self):
return self.url
使用法は次のとおりです。
a = u("http://some/path")
b = a + "and/some/another/path" # http://some/path/and/some/another/path