109

Pythonには変数base_dirfilename. それらを連結して取得したいと思いfullpathます。しかし、ウィンドウの下では\、 および for POSIXを使用する必要があります/

fullpath = "%s/%s" % ( base_dir, filename ) # for Linux

このプラットフォームを独立させるにはどうすればよいですか?

4

6 に答える 6

183

これには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 固有の情報を見つけるための多くの便利なメソッドが含まれています。

于 2012-06-06T16:57:40.440 に答える
26

使用os.path.join():

import os
fullpath = os.path.join(base_dir, filename)

os.pathモジュールには、プラットフォームに依存しないパス操作に必要なすべてのメソッドが含まれていますが、現在のプラットフォームでパス区切りが何であるかを知る必要がある場合は、os.sep.

于 2012-06-06T16:58:07.747 に答える
9
import os
path = os.path.join("foo", "bar")
path = os.path.join("foo", "bar", "alice", "bob") # More than 2 params allowed.
于 2012-06-06T17:01:10.483 に答える
1

このためのヘルパー クラスを作成しました。

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
于 2014-11-25T19:21:30.220 に答える