Pythonで、次のようなパスがあると仮定します。
/folderA/folderB/folderC/folderD/
folderD
部分だけを取得するにはどうすればよいですか?
os.path.normpath
を使用してから、 os.path.basename
を使用します。
>>> os.path.basename(os.path.normpath('/folderA/folderB/folderC/folderD/'))
'folderD'
1つ目は末尾のスラッシュを取り除き、2つ目はパスの最後の部分を示します。 basename
のみを使用すると、最後のスラッシュ(この場合は''
)以降のすべてが得られます。
できる
>>> import os
>>> os.path.basename('/folderA/folderB/folderC/folderD')
PDATE1:このアプローチは、/ folderA/folderB/folderC/folderD/xx.pyを指定した場合に機能します。これにより、xx.pyがベース名として与えられます。これはあなたが望んでいるものではありません。だからあなたはこれを行うことができます-
>>> import os
>>> path = "/folderA/folderB/folderC/folderD"
>>> if os.path.isdir(path):
dirname = os.path.basename(path)
PDATE2: larsが指摘したように、末尾の「/」に対応するように変更します。
>>> from os.path import normpath, basename
>>> basename(normpath('/folderA/folderB/folderC/folderD/'))
'folderD'
私のアプローチは次のとおりです。
>>> import os
>>> print os.path.basename(
os.path.dirname('/folderA/folderB/folderC/folderD/test.py'))
folderD
>>> print os.path.basename(
os.path.dirname('/folderA/folderB/folderC/folderD/'))
folderD
>>> print os.path.basename(
os.path.dirname('/folderA/folderB/folderC/folderD'))
folderC
python 3を使用すると、 pathlib
モジュールを使用できます(- pathlib.PurePath
など):
>>> import pathlib
>>> path = pathlib.PurePath('/folderA/folderB/folderC/folderD/')
>>> path.name
'folderD'
ファイルがある最後のフォルダー名が必要な場合:
>>> path = pathlib.PurePath('/folderA/folderB/folderC/folderD/file.py')
>>> path.parent.name
'folderD'
ファイルが置かれている最後のフォルダ名を取得するためのソリューションを探していましたが、正しい部分を取得するために2回分割して使用しました。それは問題ではありませんが、グーグルは私をここに移しました。
pathname = "/folderA/folderB/folderC/folderD/filename.py"
head, tail = os.path.split(os.path.split(pathname)[0])
print(head + " " + tail)
素朴なソリューション(Python 2.5.2+):
s="/path/to/any/folder/orfile"
desired_dir_or_file = s[s.rindex('/',0,-1)+1:-1] if s.endswith('/') else s[s.rindex('/')+1:]
path = "/folderA/folderB/folderC/folderD/"
last = path.split('/').pop()
str = "/folderA/folderB/folderC/folderD/"
print str.split("/")[-2]