web-dev-qa-db-ja.com

Pythonでパスの最後の部分のみを取得するにはどうすればよいですか?

Pythonで、次のようなパスがあると仮定します。

/folderA/folderB/folderC/folderD/

folderD部分だけを取得するにはどうすればよいですか?

192
pepero

os.path.normpath を使用してから、 os.path.basename を使用します。

>>> os.path.basename(os.path.normpath('/folderA/folderB/folderC/folderD/'))
'folderD'

1つ目は末尾のスラッシュを取り除き、2つ目はパスの最後の部分を示します。 basenameのみを使用すると、最後のスラッシュ(この場合は'')以降のすべてが得られます。

319
Fred Foo

できる

>>> 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'
20

私のアプローチは次のとおりです。

>>> 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
14
Mike Mitterer

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'
9
jinnlao

ファイルが置かれている最後のフォルダ名を取得するためのソリューションを探していましたが、正しい部分を取得するために2回分割して使用しました。それは問題ではありませんが、グーグルは私をここに移しました。

pathname = "/folderA/folderB/folderC/folderD/filename.py"
head, tail = os.path.split(os.path.split(pathname)[0])
print(head + "   "  + tail)
7
user1767754

素朴なソリューション(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:]
2
mshsayem
path = "/folderA/folderB/folderC/folderD/"
last = path.split('/').pop()
0
GSto
str = "/folderA/folderB/folderC/folderD/"
print str.split("/")[-2]
0
Andrew Sledge