在Python中获取文件的文件夹名称


87

在Python中,我应该使用哪个命令来获取包含正在使用的文件的文件夹的名称?

"C:\folder1\folder2\filename.xml"

"folder2"就是我想要得到的。

我唯一想出的就是使用os.path.split两次:

folderName = os.path.split(os.path.split("C:\folder1\folder2\filename.xml")[0])[1]

有什么更好的方法吗?


Answers:


162

您可以使用dirname

os.path.dirname(path)

返回路径名path的目录名。这是通过将路径传递给函数split()返回的对中的第一个元素。

给定完整路径,然后您可以正常拆分以获取路径的最后一部分。例如,通过使用basename

os.path.basename(path)

返回路径名path的基本名称。这是通过将路径传递给函数split()返回的对中的第二个元素。请注意,此函数的结果与Unix basename程序不同。'/ foo / bar /'的基本名称返回'bar',而basename()函数返回一个空字符串('')。


全部一起:

>>> import os
>>> path=os.path.dirname("C:/folder1/folder2/filename.xml")
>>> path
'C:/folder1/folder2'
>>> os.path.basename(path)
'folder2'

7
或者,要获取最后一部分,您可以使用os.path.basename
mgilson

@mgilson好点!更新了我的答案以反映这一点,非常感谢
fedorqui'SO stop harm''15

17

您正在寻找使用dirname。如果只需要一个目录,则可以使用os.path.basename

当放在一起时,它看起来像这样:

os.path.basename(os.path.dirname('dir/sub_dir/other_sub_dir/file_name.txt'))

那应该让你“ other_sub_dir”

以下不是理想的方法,但我最初是使用os.path.split提出的,只是获得了最后一项。看起来像这样:

os.path.split(os.path.dirname('dir/sub_dir/other_sub_dir/file_name.txt'))[-1]

5
str.split最好不要使用进行拆分(最好使用它(可以更好地os.path.split处理不同操作系统的差异))。
mgilson

是。你是对的!我忘了。感谢@mgilson
idjaw

9

这已经很老了,但是如果您使用的是Python 3.4或更高版本,请使用PathLib

# using OS
import os
path=os.path.dirname("C:/folder1/folder2/filename.xml")
print(path)
print(os.path.basename(path))

# using pathlib
import pathlib
path = pathlib.PurePath("C:/folder1/folder2/filename.xml")
print(path.parent)
print(path.parent.name)

8

os.path.dirname 您正在寻找的是-

os.path.dirname(r"C:\folder1\folder2\filename.xml")

确保r在字符串之前加上前缀,以便将其视为原始字符串。

演示-

In [46]: os.path.dirname(r"C:\folder1\folder2\filename.xml")
Out[46]: 'C:\\folder1\\folder2'

如果您只需要folder2,则可以将os.path.basename其与上面的示例一起使用-

os.path.basename(os.path.dirname(r"C:\folder1\folder2\filename.xml"))

演示-

In [48]: os.path.basename(os.path.dirname(r"C:\folder1\folder2\filename.xml"))
Out[48]: 'folder2'

1

您可以将完整路径作为字符串获取,然后使用操作系统的分隔符将其分成列表。然后,您可以使用负索引从列表末尾访问元素,从而获得程序名称,文件夹名称等。

像这样:

import os
strPath = os.path.realpath(__file__)
print( f"Full Path    :{strPath}" )
nmFolders = strPath.split( os.path.sep )
print( "List of Folders:", nmFolders )
print( f"Program Name :{nmFolders[-1]}" )
print( f"Folder Name  :{nmFolders[-2]}" )
print( f"Folder Parent:{nmFolders[-3]}" )

上面的输出是这样的:

Full Path    :C:\Users\terry\Documents\apps\environments\dev\app_02\app_02.py
List of Folders: ['C:', 'Users', 'terry', 'Documents', 'apps', 'environments', 'dev', 'app_02', 'app_02.py']
Program Name :app_02.py
Folder Name  :app_02
Folder Parent:dev

1

你可以使用pathlib

from pathlib import Path
Path(r"C:\folder1\folder2\filename.xml").parts[-2]

上面的输出是这样的:

'folder2'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.