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

时间:2015-10-27 15:28:21

标签: python python-3.x directory

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

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

这里"folder2"是我想要的。

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

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

有没有更好的方法呢?

7 个答案:

答案 0 :(得分:87)

您可以使用dirname

os.path.dirname(path)
     

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

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

os.path.basename(path)
     

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

所有在一起:

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

答案 1 :(得分:11)

您希望使用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]

答案 2 :(得分:6)

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'

答案 3 :(得分:1)

这已经很老了,但是如果您使用的是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)

答案 4 :(得分: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

答案 5 :(得分:1)

您可以使用 pathlib

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

上面的输出是这样的:

'folder2'

答案 6 :(得分:0)

我正在使用两种方法来获得相同的响应: 其中之一使用:

   os.path.basename(filename)

由于我在脚本中发现的错误,我将其更改为:

Path = filename[:(len(filename)-len(os.path.basename(filename)))]

由于python的'\\'

,这是一种解决方法