os.path.split
os.path.splitを使うとパス名とファイル名を分けることができます。
path = '/usr/bin/python' print os.path.split(path) # => ('/usr/bin', 'python')
str.splitを使って同じことをするならこんな感じでしょうか。
path = '/usr/bin/python' print ('/'.join(path.split('/')[:-1]), path.split('/')[-1]) # => ('/usr/bin', 'python')
os.path.splitextを使うとファイル名と拡張子を分けることができます。
path = '/foo/bar/boo.py' print os.path.splitext(path) # => ('/foo/bar/boo', '.py') path = '/foo/bar/boo/apple.orange.banana.py' print os.path.splitext(path) # => ('/foo/bar/boo/apple.orange.banana', '.py')
最後の . 以下が拡張子とみなされるみたいです。
str.splitを使って同じことをするならこんな感じでしょうか。
path = '/foo/bar/boo.py' print ('.'.join(path.split('.')[:-1]), '.'+path.split('.')[-1]) # => ('/foo/bar/boo', '.py') path = '/foo/bar/boo/apple.orange.banana.py' print ('.'.join(path.split('.')[:-1]), '.'+path.split('.')[-1]) # => ('/foo/bar/boo/apple.orange.banana', '.py')
os.walk
os.walkを使うと任意のディレクトリ以下のファイル名を取得することができます。
# walk.py import os import sys for root, dirs, files in os.walk(sys.argv[1]): for f in files: print os.path.join(root, f)
ディレクトリ構成が
- walk.py
- foo
- apple.txt
- bar
- boo
- orange.txt
- boo
こんな感じになっているものとして、./ 以下のファイルを表示してみます。
> python walk.py ./ ./foo/apple.txt ./foo/bar/boo/orange.txt
os.path.joinはパスの要素をうまいこと結合してくれる関数です。
import os print os.path.join('foo', 'bar', 'boo') # => foo/bar/boo print os.path.join('/foo', 'bar/', 'boo') # => /foo/bar/boo print os.path.join('/foo', 'bar/', '/boo') # => /boo
最後の例は /boo が絶対パスだと認識されているのでしょうか……?
拡張子を変換する
任意のファイルの拡張子を変換するスクリプトを書いてみました。
# chext.py import os import sys dir = sys.argv[1] dste = '.' + sys.argv[2] srce = ['.'+i for i in sys.argv[3:]] for i in os.listdir(dir): path, ext = os.path.splitext(i) if ext in srce: srcf = os.path.join(dir, path+ext) dstf = os.path.join(dir, path+dste) os.rename(srcf, dstf) print srcf, '=>', dstf
第一引数で変換を行うディレクトリを指定し、ファイルが第三引数以下の拡張子だった場合、第二引数の拡張子に変換します。
./ の中身が
となっているものとして、拡張子 jpeg/jpe/JPG を jpg に変換するには以下のように実行します。
> python chext.py ./ jpg jpeg jpe JPG ./apple.jpeg => ./apple.jpg ./banana.JPG => ./banana.jpg ./orange.jpe => ./orange.jpg
os.walkを使うと指定したディレクトリ以下、全てのファイルを対象として拡張子を変換するスクリプトが書けます。
# chext_walk.py import os import sys dir = sys.argv[1] dste = '.' + sys.argv[2] srce = ['.'+i for i in sys.argv[3:]] for root, dirs, files in os.walk(dir): for f in files: path, ext = os.path.splitext(f) if ext in srce: srcf = os.path.join(root, path+ext) dstf = os.path.join(root, path+dste) os.rename(srcf, dstf) print srcf, '=>', dstf
ディレクトリ構成が
こんな感じになっているものとして、./foo 以下のファイルの拡張子 jpeg/jpe/JPG を jpg に変換するには以下のように実行します。
> python chext_walk.py ./foo jpg jpeg jpe JPG ./foo/apple.jpeg => ./foo/apple.jpg ./foo/bar/banana.JPG => ./foo/bar/banana.jpg ./foo/bar/boo/orange.jpe => ./foo/bar/boo/orange.jpg