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

Vas*_*ily 55 python directory python-3.x

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

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

"folder2"是我想要的.

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

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

有没有更好的方法呢?

fed*_*qui 110

你可以使用dirname:

os.path.dirname(path)
Run Code Online (Sandbox Code Playgroud)

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

并且给定完整路径,然后您可以正常拆分以获得路径的最后部分.例如,通过使用basename:

os.path.basename(path)
Run Code Online (Sandbox Code Playgroud)

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


全部一起:

>>> import os
>>> path=os.path.dirname("C:/folder1/folder2/filename.xml")
>>> path
'C:/folder1/folder2'
>>> os.path.basename(path)
'folder2'
Run Code Online (Sandbox Code Playgroud)

  • 或者,要获取最后一部分,可以使用`os.path.basename` (4认同)

dfr*_*h22 13

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


idj*_*jaw 12

您正在寻找使用dirname.如果您只想要那个目录,可以使用os.path.basename,

把它们放在一起它看起来像这样:

os.path.basename(os.path.dirname('dir/sub_dir/other_sub_dir/file_name.txt'))
Run Code Online (Sandbox Code Playgroud)

这应该会让你"other_sub_dir"

以下不是理想的方法,但我最初提出,使用os.path.split,并简单地得到最后一项.看起来像这样:

os.path.split(os.path.dirname('dir/sub_dir/other_sub_dir/file_name.txt'))[-1]
Run Code Online (Sandbox Code Playgroud)

  • 而不是使用`str.split`分割,最好使用`os.path.split`(它可以更好地处理不同操作系统的差异). (5认同)

Ana*_*mar 8

os.path.dirname 是你在找什么 -

os.path.dirname(r"C:\folder1\folder2\filename.xml")
Run Code Online (Sandbox Code Playgroud)

确保您r在字符串前面添加,以便将其视为原始字符串.

演示 -

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

如果你只是想folder2,可以使用os.path.basename上面的例子 -

os.path.basename(os.path.dirname(r"C:\folder1\folder2\filename.xml"))
Run Code Online (Sandbox Code Playgroud)

演示 -

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


小智 5

你可以使用pathlib

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

上面的输出是这样的:

'folder2'
Run Code Online (Sandbox Code Playgroud)