问题:如何从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
)。
关于如何获取文件路径的任何想法?
回答 0
您几乎可以使用该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')
回答 1
带有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模块
使用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
。如果没有,您可能仍需要将此模块用作构建模块。
回答 2
内置子模块os.path具有用于该任务的功能。
import os
os.path.dirname('T:\Data\DBDesign\DBDesign_93_v141b.mdb')
回答 3
这是代码:
import os
existGDBPath = r'T:\Data\DBDesign\DBDesign_93_v141b.mdb'
wkspFldr = os.path.dirname(existGDBPath)
print wkspFldr # T:\Data\DBDesign
回答 4
这是我的小实用程序帮助程序,用于拆分路径int文件和路径标记:
import os
# usage: file, path = splitPath(s)
def splitPath(s):
f = os.path.basename(s)
p = s[:-(len(f))-1]
return f, p
回答 5
任何在ESRI GIS Table字段计算器界面中尝试执行此操作的人都可以使用Python解析器执行此操作:
PathToContainingFolder =
"\\".join(!FullFilePathWithFileName!.split("\\")[0:-1])
以便
\ Users \ me \ Desktop \ New文件夹\ file.txt
变成
\ Users \ me \ Desktop \ New文件夹