web-dev-qa-db-ja.com

プラットフォームに依存しないファイルパス?

Pythonでアプリフォルダー内のファイルを使用するにはどうすればよいですか?もちろんプラットフォームに依存しない...これに似たもの:

#!/bin/sh
mypath=${0%/*}
LIBDIR=$mypath/modules
42
Hairo

OS固有のパスを処理するos.pathとその関数を使用できます。

>>> import os
>>> os.path.join('app', 'subdir', 'dir', 'filename.foo')
'app/subdir/dir/filename.foo'

Windowsでは、バックスラッシュを付けて印刷する必要があります。

72
Blender
import os
os.path.join(os.path.curdir, 'file.name')

または

import os
os.path.join(os.path.dirname(__file__), 'file.name')

モジュール(2)か単一のスクリプト(1)か、および同じディレクトリから呼び出すかどうかによって(1)、または別のもの(2)

編集

あなたの質問にある「試み」を見て、私はあなたが(1)が欲しいと思うと思います。

18
aviraldg

Python 3.4+では、 pathlib :を使用できます。

_from pathlib import Path

libdir = Path(__file__).resolve().with_name('modules')
_

仕組み:___file___属性には、モジュールがロードされたファイルのパス名が含まれます。これを使用してPathオブジェクトを初期化し、 resolve() メソッドを使用して絶対パスを作成し、 with_name() メソッド。

7
Eugene Yarmash

__file__にはモジュールの場所が含まれます。 os.pathの関数を使用して、そこからディレクトリを抽出します。