161

ファイルへのフルパスからフォルダーパスだけを取得したいと思います。

たとえば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)。

ファイルへのパスを取得する方法についてのアイデアはありますか?

4

7 に答える 7

184

関数を使用すると、ほとんどそこにいます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')
于 2013-06-12T04:18:47.243 に答える
108

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. そうでない場合でも、おそらくこのモジュールをビルディング ブロックとして使用する必要があります。

于 2013-06-12T04:15:47.117 に答える
63

組み込みサブモジュールos.pathには、まさにそのタスクのための機能があります。

import os
os.path.dirname('T:\Data\DBDesign\DBDesign_93_v141b.mdb')
于 2013-06-12T04:15:25.660 に答える
5

コードは次のとおりです。

import os
existGDBPath = r'T:\Data\DBDesign\DBDesign_93_v141b.mdb'
wkspFldr = os.path.dirname(existGDBPath)
print wkspFldr # T:\Data\DBDesign
于 2013-06-12T04:20:29.883 に答える