161

I would like to get just the folder path from the full path to a file.

For example T:\Data\DBDesign\DBDesign_93_v141b.mdb and I would like to get just T:\Data\DBDesign (excluding the \DBDesign_93_v141b.mdb).

I have tried something like this:

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

but it gave me a result like this:

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

which is not the result that I require (being T:\Data\DBDesign).

Any ideas on how I can get the path to my file?

4

7 回答 7

184

您几乎可以使用该split功能。您只需要加入字符串,如下所示。

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

虽然,我建议使用该os.path.dirname函数来执行此操作,但您只需要传递字符串,它就会为您完成工作。由于您似乎在 Windows 上,请考虑使用该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')
于 2013-06-12T04:18:47.243 回答
108

使用 PATHLIB 模块(更新答案)

应该考虑使用pathlib进行新的开发。它位于 Python3.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. 如果没有,您可能仍需要将此模块用作构建块。

于 2013-06-12T04:15:47.117 回答
63

内置子模块os.path具有该任务的功能。

import os
os.path.dirname('T:\Data\DBDesign\DBDesign_93_v141b.mdb')
于 2013-06-12T04:15:25.660 回答
5

这是代码:

import os
existGDBPath = r'T:\Data\DBDesign\DBDesign_93_v141b.mdb'
wkspFldr = os.path.dirname(existGDBPath)
print wkspFldr # T:\Data\DBDesign
于 2013-06-12T04:20:29.883 回答
1

这是我用于拆分路径 int 文件、路径标记的小实用程序助手:

import os    
# usage: file, path = splitPath(s)
def splitPath(s):
    f = os.path.basename(s)
    p = s[:-(len(f))-1]
    return f, p
于 2019-05-10T23:21:18.907 回答
0

我使用它将当前工作目录更改为文件夹;

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

chdir(realpath(dirname(argv[0])))
  • chdir 更改工作目录。我怀疑你会需要这个。
  • realpath 遵循符号链接。
  • dirname 只返回路径
  • argv 是用于执行程序的命令行
于 2021-09-02T18:38:03.227 回答
0

尝试在 ESRI GIS 表字段计算器界面中执行此操作的任何人都可以使用Python 解析器执行此操作:

PathToContainingFolder =

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

以便

\Users\me\Desktop\New 文件夹\file.txt

变成

\Users\me\Desktop\新建文件夹

于 2019-08-29T12:35:10.007 回答