Pythonでファイルパスからフォルダーパスを抽出するにはどうすればよいですか?


115

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

たとえば、(を除く)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)。

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

回答:


140

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')

os.sep.join(existGDBPath.split(os.sep)[:-1]きれいに見えます。
Dave Babbitt、

88

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


Path().parent私が探していたもの!
iedmrc

44

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

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

4

これがコードです:

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

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

0

ESRI GISテーブルフィールド計算機インターフェイスでこれを実行しようとする人は誰でも、Pythonパーサーでこれを実行できます。

PathToContainingFolder =

"\\".join(!FullFilePathWithFileName!.split("\\")[0:-1])

そのため

\ Users \ me \ Desktop \ New folder \ file.txt

なる

\ Users \ me \ Desktop \ Newフォルダー

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.