ファイルへのフルパスからフォルダーパスのみを取得したいと思います。
たとえば、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
である)。
ファイルへのパスを取得する方法に関するアイデアはありますか?
split
関数を使用してほとんどそこにいました。次のように、文字列を結合する必要がありました。
>>> import os
>>> '\\'.join(existGDBPath.split('\\')[0:-1])
'T:\\Data\\DBDesign'
os.path.dirname
関数を使用してこれを行うことをお勧めしますが、文字列を渡すだけで、作業は自動的に行われます。あなたは窓にいるように見えるので、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.path モジュールを使用します。
>>> import os
>>> existGDBPath = r'T:\Data\DBDesign\DBDesign_93_v141b.mdb'
>>> wkspFldr = os.path.dirname(existGDBPath)
>>> print wkspFldr
'T:\Data\DBDesign'
先に進み、何らかのファイル名操作を行う必要がある場合は、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')
組み込みサブモジュール os.path には、まさにそのタスクのための機能があります。
import os
os.path.dirname('T:\Data\DBDesign\DBDesign_93_v141b.mdb')
コードは次のとおりです。
import os
existGDBPath = r'T:\Data\DBDesign\DBDesign_93_v141b.mdb'
wkspFldr = os.path.dirname(existGDBPath)
print wkspFldr # T:\Data\DBDesign
ESRI GISテーブルフィールド電卓インターフェイスでこれを行おうとする人は誰でもPythonパーサーでこれを行うことができます。
PathToContainingFolder =
"\\".join(!FullFilePathWithFileName!.split("\\")[0:-1])
そのため
\ Users\me\Desktop\New folder\file.txt
になる
\ Users\me\Desktop\Newフォルダー
これは、パスintファイル、パストークンを分割するための小さなユーティリティヘルパーです。
import os
# usage: file, path = splitPath(s)
def splitPath(s):
f = os.path.basename(s)
p = s[:-(len(f))-1]
return f, p