我想获得从完整路径到文件的文件夹路径。
例如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 :(得分:103)
你几乎在那里使用了split
功能。你只需要加入字符串,如下所示。
>>> '\\'.join(existGDBPath.split('\\')[0:-1])
'T:\\Data\\DBDesign'
虽然我建议使用os.path.dirname
函数来执行此操作,但您只需要传递字符串,它就会为您完成工作。因为,您似乎在Windows上,请考虑使用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')
答案 1 :(得分:63)
使用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
中实现了。如果没有,您仍可能需要将此模块用作构建块。
<强>更新强>
应考虑使用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')
答案 2 :(得分:33)
内置子模块os.path具有执行该任务的功能。
import os
os.path.dirname('T:\Data\DBDesign\DBDesign_93_v141b.mdb')
答案 3 :(得分:2)
以下是代码:
import os
existGDBPath = r'T:\Data\DBDesign\DBDesign_93_v141b.mdb'
wkspFldr = os.path.dirname(existGDBPath)
print wkspFldr # T:\Data\DBDesign
答案 4 :(得分:0)
这是我的小工具助手,用于分割路径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 :(得分:0)
任何试图在ESRI GIS表格字段计算器界面中执行此操作的人都可以使用 Python解析器来执行此操作:
PathToContainingFolder =
"\\".join(!FullFilePathWithFileName!.split("\\")[0:-1])
这样
\ Users \ me \ Desktop \ New folder \ file.txt
成为
\ Users \ me \ Desktop \ New文件夹