Pythonでのパス名操作いろいろ

Pythonには、パス名を操作する便利な関数がたくさんあります!!覚えておくと便利なものを、、、

いっぺんにご紹介します
(`・ω・´)ゞ

カレントディレクトリの取得

現在のカレントディレクトリを取得することができます。

import os
os.getcwd()

Maya2016の場合は「C:\Program Files\Autodesk\Maya2016」とインストールディレクトリになります。

スタンドアローンなPythonの場合は、Pythonがあるディレクトリ「c:\Python27」になります。

カレントディレクトリの移動

カレントディレクトリを移動することができます。相対パスも指定できます!

import os
os.chdir('../')
os.getcwd()

上記の例では「../」は「1つ上のディレクトリ」という意味になり、Maya2016では「C:\Program Files\Autodesk」にカレントディレクトリが移動します。

ディレクトリ内のリストを取得

指定したパスにあるファイル・ディレクトリのリストを取得します。

import os
os.listdir('C:/Program Files/Autodesk')
# ['Maya2014', 'Maya2015', 'Maya2016', 'Maya2016.5', 'Maya2017', 'mentalrayForMaya2014', 'mentalrayForMaya2015', 'mentalrayForMaya2016', 'mentalrayForMaya2016.5'] # 

たぶん、「for文」と組み合わせて使用するかと思います。返ってくる名前は、ファイル名・ディレクトリ名なので、後述の「パスの連結」をすることでアクセスできるパス名になります。

import os
for path in os.listdir('C:/Program Files/Autodesk'):
    print(path)

指定されたディレクトリの「.ma」だけ処理する」という場合は、以下のようになります。

import os
for path in os.listdir('./'):
	if path.endswith(".ma"):
		# mbファイルだった時の処理
		pass

再帰処理」と組み合わせる事で、指定ディレクトリの末端まで調べつくすことができます!

import os
def searchFile(root, result=[]):
	for path in os.listdir(root):
		fullpath = os.path.join(root,path)
		if os.path.isdir(fullpath):
			result = searchFile(fullpath, result)
		else:
			result.append(fullpath)
	return result

searchFile('C:/Program Files/Autodesk/Maya2016/bin')

 

ディレクトリ?ファイル?

指定されたパス名が、ファイルかディレクトリか調べることができます。「os.listdir」と組み合わせることで、「指定ディレクトリ以下のディレクトリのみ処理する」といった事が可能です!

ディレクトリ

import os
os.path.isdir('C:/Program Files/Autodesk')
# False

ファイル

import os
os.path.isfile('C:/Program Files/Autodesk/Maya2016/bin/maya.exe')
# True

パスの連結

指定されたパスを連結してくれます!つなげたい要素を「,区切り」で指定します。いくつでもOKです!

Windowsだから「\」その他のOSだから「/」とか面倒くさいことを考えなくていいので楽かと思います!後、気持ちコードが読みやすいかと思います(`・ω・´)ゞ

import os
os.path.join('C:/Program Files/Autodesk/Maya2016','bin','maya.exe')
# C:/Program Files/Autodesk/Maya2016\bin\maya.exe
2つ目以降に指定する名前が「/(または\)」から始まると、思わしくない結果が返ってきます。
import os
print(os.path.join('C:/Program Files/Autodesk/Maya2016','bin','/maya.exe'))

最後が「/maya.exe」となるので、結果が「/maya.exe」のみになってしまいます(;´∀`)

これは、「/maya.exe」が「絶対パス」になるからです。ちょっとWindowsだと馴染みがないかもです。。。

ファイル・ディレクトリの存在確認

指定されたファイル・ディレクトリが存在するか調べます!「存在しなければ、フォルダを作る」「存在していれば、上書き確認をする」といった流れを作るのに必要です!

import os
os.path.exists('C:/Program Files/Autodesk/Maya2016')
# True

パス名から、ファイル・ディレクトリ名の取得

指定されたパスの最も右側のファイル名・ディレクトリ名を取得できます。

import os
os.path.basename('C:/Program Files/Autodesk/Maya2016/bin/maya.exe')
# maya.exe

絶対パスにする

指定されたパス名を絶対パスに変換します。以下の例では、カレントディレクトリの意味である「./」を指定して、絶対パスを取得します。Maya2016の場合は「C:\Program Files\Autodesk\Maya2016」になります。

import os
os.path.abspath('./')