如何从 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 方法 split
和 join
是不可移植的(想想 *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
我在找什么!
标记只是因为您将 内置的子模块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 中的文件路径中提取文件夹路径?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用Paramiko Python通过SSH从远程服务器复制文件? FileNotFoundError:[WinError 3]系统找不到指定的路径