如何在 Python 中从文件路径提取文件夹路径?

我想得到的只是文件夹路径从完整的路径到一个文件。

例如,T:\Data\DBDesign\DBDesign_93_v141b.mdb和我想只得到 T:\Data\DBDesign(不包括 \DBDesign_93_v141b.mdb)。

我试过这样的方法:

existGDBPath = r'T:\Data\DBDesign\DBDesign_93_v141b.mdb'
wkspFldr = str(existGDBPath.split('\\')[0:-1])
print wkspFldr

但它给了我这样一个结果:

['T:', 'Data', 'DBDesign']

这不是我要求的结果(是 T:\Data\DBDesign)。

有什么办法能让我找到我的文件吗?

268740 次浏览

内置的子模块 Os.path有一个用于该任务的函数。

import os
os.path.dirname('T:\Data\DBDesign\DBDesign_93_v141b.mdb')

(更新答案)

应该考虑使用 Pathlib进行新的开发。对于 Python 3.4,它在 stdlib 中,但对于早期版本,它在 可在 PyPI 上获得中。这个库提供了一种更加面向对象的方法来操作路径 <opinion>,并且使用 </opinion>读取和编程更加容易。

>>> import pathlib
>>> existGDBPath = pathlib.Path(r'T:\Data\DBDesign\DBDesign_93_v141b.mdb')
>>> wkspFldr = existGDBPath.parent
>>> print wkspFldr
Path('T:\Data\DBDesign')

操作系统模块

使用 Os.path模块:

>>> import os
>>> existGDBPath = r'T:\Data\DBDesign\DBDesign_93_v141b.mdb'
>>> wkspFldr = os.path.dirname(existGDBPath)
>>> print wkspFldr
'T:\Data\DBDesign'

您可以继续假设,如果需要对文件名进行某种操作,那么它已经在 os.path中实现了。如果没有,您可能仍然需要使用这个模块作为构建块。

使用 split函数就差不多了,只需要加入字符串,如下所示。

>>> import os
>>> '\\'.join(existGDBPath.split('\\')[0:-1])
'T:\\Data\\DBDesign'

不过,我建议使用 os.path.dirname函数来完成这项工作,您只需要传递字符串,它就会为您完成这项工作。因为,你似乎在窗口,考虑使用 abspath函数也。举个例子:

>>> import os
>>> os.path.dirname(os.path.abspath(existGDBPath))
'T:\\Data\\DBDesign'

如果希望在分割后同时使用文件名和目录路径,可以使用返回元组的 os.path.split函数,如下所示。

>>> import os
>>> os.path.split(os.path.abspath(existGDBPath))
('T:\\Data\\DBDesign', 'DBDesign_93_v141b.mdb')

密码如下:

import os
existGDBPath = r'T:\Data\DBDesign\DBDesign_93_v141b.mdb'
wkspFldr = os.path.dirname(existGDBPath)
print wkspFldr # T:\Data\DBDesign

下面是用于分割路径 int 文件、路径标记的小实用工具助手:

import os
# usage: file, path = splitPath(s)
def splitPath(s):
f = os.path.basename(s)
p = s[:-(len(f))-1]
return f, p

任何试图在 ESRI GIS 表格字段计算器接口中完成此操作的人都可以使用 Python 解析器:

PathToContainingFolder =

"\\".join(!FullFilePathWithFileName!.split("\\")[0:-1])

所以

用户我桌面新文件夹 file.txt

变成了

用户我桌面新文件夹

我用这个把当前的工作目录更改为一个文件夹;

from os import chdir
from os.path import realpath
from os.path import dirname


chdir(realpath(dirname(argv[0])))
  • Chdir 改变了工作目录我想你不需要这个。
  • Realpath 遵循符号链接。
  • Dirname 只返回路径
  • Argv 是用于执行程序的命令行