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

Gen*_*pec 95 python directory file extract path

我想获得从完整路径到文件的文件夹路径.

例如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 
Run Code Online (Sandbox Code Playgroud)

但它给了我这样的结果:

['T:', 'Data', 'DBDesign']
Run Code Online (Sandbox Code Playgroud)

这不是我要求的结果T:\Data\DBDesign.

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

Suk*_*lra 113

你几乎在那里使用了这个split功能.你只需要加入字符串,如下所示.

>>> import os
>>> '\\'.join(existGDBPath.split('\\')[0:-1])
'T:\\Data\\DBDesign'
Run Code Online (Sandbox Code Playgroud)

虽然,我建议使用该os.path.dirname函数来执行此操作,但您只需要传递字符串,它就会为您完成工作.因为,你似乎在Windows上,考虑使用该abspath功能.一个例子 -

>>> import os
>>> os.path.dirname(os.path.abspath(existGDBPath))
'T:\\Data\\DBDesign'
Run Code Online (Sandbox Code Playgroud)

如果在分割后同时需要文件名和目录路径,则可以使用os.path.split返回元组的函数,如下所示.

>>> import os
>>> os.path.split(os.path.abspath(existGDBPath))
('T:\\Data\\DBDesign', 'DBDesign_93_v141b.mdb')
Run Code Online (Sandbox Code Playgroud)

  • `'\\'.join()` 不可移植,请使用 `os.path.join()` 代替 (5认同)

Set*_*ton 77

使用os.path模块:

>>> import os
>>> existGDBPath = r'T:\Data\DBDesign\DBDesign_93_v141b.mdb'
>>> wkspFldr = os.path.dirname(existGDBPath)
>>> print wkspFldr 
'T:\Data\DBDesign'
Run Code Online (Sandbox Code Playgroud)

您可以继续并假设如果您需要进行某种文件名操作,那么它已经实现了os.path.如果没有,您仍可能需要将此模块用作构建块.

UPDATE

应该考虑使用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')
Run Code Online (Sandbox Code Playgroud)


Dan*_*lan 35

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

import os
os.path.dirname('T:\Data\DBDesign\DBDesign_93_v141b.mdb')
Run Code Online (Sandbox Code Playgroud)


Vic*_*lis 5

这是代码:

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