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

Posted

技术标签:

【中文标题】如何从 Python 中的文件路径中提取文件夹路径?【英文标题】:How can I extract the folder path from file path in Python? 【发布时间】:2013-06-08 02:18:02 【问题描述】:

我只想获取文件完整路径中的文件夹路径。

例如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)。

关于如何获取文件路径的任何想法?

【问题讨论】:

【参考方案1】:

使用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')

【讨论】:

os.sep.join(existGDBPath.split(os.sep)[:-1] 看起来更漂亮。 '\\'.join() 不可移植,请改用os.path.join() 使用 str 方法 splitjoin 是不可移植的(想想 *nix 上的 /)。 os.path 有你需要的所有方法。【参考方案2】:

使用 PATHLIB 模块(更新答案)

人们应该考虑使用pathlib 进行新的开发。它在 Python3.4 的 stdlib 中,但在早期版本中是 available on 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 中实现。如果没有,您可能仍需要将此模块用作构建块。

【讨论】:

Path().parent 我在找什么! 标记只是因为您将 卡在标签中!【参考方案3】:

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

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

【讨论】:

【参考方案4】:

代码如下:

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

【讨论】:

【参考方案5】:

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

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

【讨论】:

【参考方案6】:

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

PathToContainingFolder =

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

这样

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

变成

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

【讨论】:

【参考方案7】:

我用这个把当前工作目录改成文件夹;

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

chdir(realpath(dirname(argv[0])))
chdir 更改工作目录。我怀疑你会需要这个。 realpath 遵循符号链接。 dirname 只返回路径 argv 是用来执行程序的命令行

【讨论】:

以上是关于如何从 Python 中的文件路径中提取文件夹路径?的主要内容,如果未能解决你的问题,请参考以下文章

如何从文件路径中提取目录路径?

如何从文件路径字符串中提取目录?

如何从 Bash 中的路径字符串中删除文件后缀和路径部分?

python 从路径目录,文件基名和文件扩展名中分离/提取

如何使用Paramiko Python通过SSH从远程服务器复制文件? FileNotFoundError:[WinError 3]系统找不到指定的路径

如何从日志文件路径中提取变量,测试 Logstash 中模式的日志文件名?