326

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

/folderA/folderB/folderC/folderD/

folderDどうすればその部分だけを入手できますか?

4

10 に答える 10

520

を使用os.path.normpathし、次にos.path.basename

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

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

于 2010-10-13T15:08:39.607 に答える
79

pathlibPython 3では、次のモジュールを使用できます(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'
于 2019-02-25T14:47:42.103 に答える
31

あなたができる

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

UPDATE1:このアプローチは、/ 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)

UPDATE2:larsが指摘したように、末尾の「/」に対応するように変更を加えます。

>>> from os.path import normpath, basename
>>> basename(normpath('/folderA/folderB/folderC/folderD/'))
'folderD'
于 2010-10-13T15:05:57.100 に答える
19

これが私のアプローチです:

>>> 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
于 2017-07-03T10:40:35.533 に答える
10

私はファイルが置かれている最後のフォルダ名を取得するための解決策を探していましたsplit。正しい部分を取得するために2回使用しました。それは問題ではありませんが、グーグルは私をここに転送しました。

pathname = "/folderA/folderB/folderC/folderD/filename.py"
head, tail = os.path.split(os.path.split(pathname)[0])
print(head + "   "  + tail)
于 2014-12-10T21:57:30.417 に答える
8

私はこれのためにPathのpartsメソッドが好きです:

grandparent_directory, parent_directory, filename = Path(export_filename).parts[-3:]
log.info(f'{t: <30}: {num_rows: >7} Rows exported to {grandparent_directory}/{parent_directory}/{filename}')
于 2019-10-17T17:22:22.983 に答える
3

ネイティブのPythonパッケージpathlibを使用する場合、それは本当に簡単です。

>>> from pathlib import Path
>>> your_path = Path("/folderA/folderB/folderC/folderD/")
>>> your_path.stem
'folderD'

folderD内のファイルへのパスがあるとします。

>>> from pathlib import Path
>>> your_path = Path("/folderA/folderB/folderC/folderD/file.txt")
>>> your_path.stem
'file.txt'
>>> your_path.parent
'folderD'
于 2021-07-05T14:29:15.410 に答える
0

現在のプロジェクトでは、パスの後部を関数に渡すことが多いため、Pathモジュールを使用します。n番目の部分を逆の順序で取得するために、次を使用しています。

from typing import Union
from pathlib import Path

def get_single_subpath_part(base_dir: Union[Path, str], n:int) -> str:
    if n ==0:
        return Path(base_dir).name
    for _ in range(n):
        base_dir = Path(base_dir).parent
    return getattr(base_dir, "name")

path= "/folderA/folderB/folderC/folderD/"

# for getting the last part:
print(get_single_subpath_part(path, 0))
# yields "folderD"

# for the second last
print(get_single_subpath_part(path, 1))
#yields "folderC"

さらに、残りのパスを含むパスの逆の順序でn番目の部分を渡すには、次を使用します。

from typing import Union
from pathlib import Path

def get_n_last_subparts_path(base_dir: Union[Path, str], n:int) -> Path:
    return Path(*Path(base_dir).parts[-n-1:])

path= "/folderA/folderB/folderC/folderD/"

# for getting the last part:
print(get_n_last_subparts_path(path, 0))
# yields a `Path` object of "folderD"

# for second last and last part together 
print(get_n_last_subparts_path(path, 1))
# yields a `Path` object of "folderc/folderD"

この関数はPath、文字列に簡単に変換できるオブジェクトを返すことに注意してください(例str(path)) 。

于 2020-10-16T16:57:20.143 に答える
-3
path = "/folderA/folderB/folderC/folderD/"
last = path.split('/').pop()
于 2010-10-13T15:06:12.100 に答える
-5
str = "/folderA/folderB/folderC/folderD/"
print str.split("/")[-2]
于 2010-10-13T15:06:45.100 に答える