2013-06-12 127 views
51

我已经看到这个解决方案,但不是专门针对Python的。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)的结果。

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

谢谢。

回答

71

您几乎在那里使用了split函数。你只需要加入字符串,如下所示。

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

虽然,我会建议使用os.path.dirname功能做到这一点,你只需要通过字符串,它会为你做的工作。因为,你似乎在窗户上,请考虑使用abspath函数。一个例子 -

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

如果你想同时文件名和被拆分后的目录路径,您可以使用os.path.split函数返回一个元组,如下所示。

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

灿烂,非常感谢这里你的帮助。这已经非常丰富。我将使用abspath选项。 – Genspec

16

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

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

使用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实施。如果没有,你仍然可能需要使用这个模块作为构建模块。

UPDATE

每个人都应该考虑使用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') 
0

下面是代码:

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