指定されたディレクトリから 1 レベル上または下のディレクトリを取得する方法はありますか? たとえば、「/a/b/c/」ディレクトリが関数に入力されました。
したがって、関数は次を返します。
lvl_down = '/a/b/'
lvl_up = '/a/b/c/d/'
「re」モジュールを使用して(少なくともディレクトリの下の1レベルで)実行できると思いますが、正規表現なしで実行するより簡単でより良い方法があるでしょうか?
指定されたディレクトリから 1 レベル上または下のディレクトリを取得する方法はありますか? たとえば、「/a/b/c/」ディレクトリが関数に入力されました。
したがって、関数は次を返します。
lvl_down = '/a/b/'
lvl_up = '/a/b/c/d/'
「re」モジュールを使用して(少なくともディレクトリの下の1レベルで)実行できると思いますが、正規表現なしで実行するより簡単でより良い方法があるでしょうか?
関数がどのように知る必要があるのか、ディレクトリdに移動したいのかわかりません。
#!/usr/bin/python
import os.path
def lvl_down(path):
return os.path.split(path)[0]
def lvl_up(path, up_dir):
return os.path.join(path, up_dir)
print(lvl_down('a/b/c')) # prints a/b
print(lvl_up('a/b/c','d')) # prints a/b/c/d
注:以前は別の解決策がありましたが、os.pathの方がはるかに優れています。
パスを操作するメソッドは、モジュールos
とos.path
.
os.path.join - 1 つ以上のパス コンポーネントをインテリジェントに結合します。
os.path.split - パス名パスをペアに分割します。(head, tail)
ここで、tailは最後のパス名コンポーネントであり、headはそれまでのすべてです。
os.path.isdir -パスが既存のディレクトリである場合にTrueを返します。
os.listdir - pathで指定されたディレクトリ内のエントリの名前を含むリストを返します。
def parentDir(dir):
return os.path.split(dir)[0]
def childDirs(dir):
possibleChildren = [os.path.join(dir, file) for file in os.listdir(dir)]
return [file for file in possibleChildren if os.path.isdir(file)]
まず、指定されたパスがスラッシュで終わる場合は、常にスライスで削除する必要があります。そうは言っても、パスの親ディレクトリを取得する方法は次のとおりです。
>>> import os.path
>>> p = '/usr/local'
>>> os.path.dirname(p)
'/usr'
下に移動するには、次のように変数に名前を追加します。
>>> head = '/usr/local'
>>> rest = 'include'
>>> os.path.join(head, rest)
'/usr/local/include'