2017-07-19 4 views
1

は私が​​やったときに、それは私に上記のパスを示したディレクトリがどのようにos.path.dirnameから受信したパスを分割する()

E:\Data\App 

内に保存Pythonのファイルを持っているとしましょう。今のAppを切り出し、コンファレンスを使用してE:\Data\は一般的ではないだろうと異なりますので、私は直接の完全なパスを使用することはできませんE:\Data\Conf

内のファイルを保存するので、どのように、私はE:\Data\Conf\内に新しいファイルを作成したいと言うことができます。

ありがとうございました。

+0

もう一度レベルアップするには、もう一度 'dirname'を呼び出してください。 – tzaman

答えて

0
from os.path import dirname, join 

file_dir = dirname(the_file) 
parent_dir = dirname(file_dir) 
conf_dir = join(parent_dir, 'Conf') 

は、あなたが渡したパスを含むディレクトリを常に取得するため、ファイルを呼び出すとアプリケーションディレクトリが作成されます。 appディレクトリで再度呼び出すと、その親を取得します。 os.path.joinを使用して"Conf"などの任意のディレクトリを添付することができます。

もう一つの方法は、任意の数のレベルを上に移動するos.pardirとともにos.path.abspathを使用している:

import os 
from os.path import abspath, dirname, join 

conf_dir = abspath(join(dirname(the_file), os.pardir, "Conf")) 
             #^You can add more of these to go up the heirarchy 

os.pardirとインナーjoin呼び出しが"E:\Data\App\..\Conf"のようなパスを構築し、abspath"E:\Data\Conf"にそれを解決します。

+0

こんにちは。ありがとう。あなたはそれを説明してください。 –

+0

@SAndrew私は少しの説明を追加しました。まだ明確ではないものはありますか? – tzaman

+0

ありがとうございました。私が 'E:/ data1/data2/data3/data4'のようなディレクトリ構造を持っていて、data4からdata1に直接移動したいのであれば、最後の疑問です。だから、 'os.path.dirname()'を何度も繰り返す代わりに、data1に直接ジャンプする他の方法がありますか? –

1

あなたはこれを行うことができます:

path = 'E:\Data\conf' # Or however you will assign this 
dir_path = '\\'.join(path.split('\\')[:-1]) + '\\' # 'E:\Data\' 

は、これは基本的には、ツリー内の最後のパスが、すべての文字列を再構築し、\によってパスの文字列を分割します。

関連する問題