获取 Python 中文件的文件夹名

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

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

在这里 "folder2"是我想得到的。

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

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

还有更好的办法吗?

297763 次浏览

你可以使用 dirname:

os.path.dirname(path)

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

给定完整路径,就可以正常分割得到路径的最后一部分。例如,通过使用 basename:

os.path.basename(path)

返回路径名路径的基名 通过传递路径到函数 split ()返回的对 这个函数的结果与 Unix 基名不同 其中“/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'

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'

您正在寻找使用 名字。如果您只想要一个目录,您可以使用 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]

这是相当老的,但是如果您正在使用 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)

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

像这样:

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

你可以使用 Pathlib

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

上述结果如下:

'folder2'

我用两种方法得到相同的回答: 其中一个使用:

   os.path.basename(filename)

由于我在剧本中发现的错误,我改为:

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

由于 Python 的 '\\',这是一个变通方案

我对可用的解决方案进行了改进,即,

  1. 档案
  2. 带有训练斜杠的目录
  3. 没有训练斜杠的目录

我的解决办法是,

from pathlib import Path


def path_lastname(s):
Path(s).with_name("foo").parts[-2]

解释

  • Path(s)-在 s之外创建一个自定义 Path 对象,而不解析它。

  • 向路径添加一个假文件 foo

  • .parts[-2]返回字符串的倒数第二部分。 -1部分为 foo