Pythonで新しいディレクトリを作成する

概要

実現方法・説明

「os.makedirs()」を使う

Pythonで新しいディレクトリを作成したい時は
os.makedirs() 関数を使う。
こんな感じ。

os.makedirs(A)

もちろん、引数のAには、
作成したいディレクトリを表すパスの文字列を渡す。

注意点

パスは絶対パスでも相対パスでもいいが
存在するディレクトリのパスを指定するとエラーになる。

※本ページ「ex.3」で説明する「exist_ok=True」を付与するとエラーを回避可能

使用例

動作確認環境:Python3.6 / macOS 10.13.5

ex.1 絶対パスを指定したディレクトリの作成

絶対パスを指定してディレクトリを作成してみよう。

ここで、作成したいディレクトリを
「/Users/taka/Desktop/NewDir」とすると

import os

os.makedirs('/Users/taka/Desktop/NewDir')

os.chdir('/Users/taka/Desktop/NewDir')
print('ex.1 :' + os.getcwd())

(実行結果)
ex.1 :/Users/taka/Desktop/NewDir

3行めが、ディレクトリを作成している部分だ。
4〜5行めは、作成されたことの確認を兼ねて
作成したディレクトリをカレントにした上で
パスを表示している。

ちなみに、フルパスで指定した中で
存在しないディレクトリがあればすべて作成する。

例えば、Aディレクトリのみ存在した状態で
以下のようなコードを実行すると
ディレクトリB,Cが同時に作成される、ということである。

os.makedirs(‘/A/B/C’)

ex.2 相対パスを指定したディレクトリの作成

今度は相対パスを指定してディレクトリを作成してみよう。
カレントディレクトリを「/Users/taka/Desktop」とすると

import os

os.chdir('/Users/taka/Desktop')
os.makedirs('NewDir2')

os.chdir('/Users/taka/Desktop/NewDir2')
print('ex.2 :' + os.getcwd())

(実行結果)
ex.2 :/Users/taka/Desktop/NewDir2

3行目で、予めカレントディレクトリの設定をしている。
そして、4行めで、ディレクトリを作成している。
ex.1と異なるのは、ディレクトリ名のみで指定していること。
これで、カレントディレクトリに
指定した名前のディレクトリが作成される。

6〜7行めは、ex.1と同様
作成されたことの確認を兼ねた処理。

ex.3 既にディレクトリが存在する場合の対処

ディレクトリの作成については以上だが
もしも、存在するディレクトリを指定したらどうなるだろう。

import os

os.makedirs('/Users/taka/Desktop/NewDir')
os.makedirs('/Users/taka/Desktop/NewDir')

(実行結果)
FileExistsError: [Errno 17] File exists: ‘/Users/taka/Desktop/NewDir’

これは、冒頭でも説明した通り、エラーになり
「FileExistsError」が発生する。

そして例外処理を書かない限り
そこでプログラムは停止する。

これでは不便だ、ディレクトリがない場合は作成するが
ある場合は何もしないようにしたい、というと場合もある。

こんなときは、os.path.exists()や
os.path.isdir()などを使って
ディレクトリの存在チェックをしてから
ディレクトリの作成をしてもいいが、こんなことも出来る。

import os

os.makedirs('/Users/taka/Desktop/NewDir', exist_ok=True)

このように書くと、既にディレクトリが存在すれば
何もせず、次のコードを実行する。

もちろん、 exist_ok=Falseと書くと
既にディレクトリが存在すればエラーになる。

その時々で使い分けるといいだろう。

補足

Pythonは、主だったOSコマンドは関数化されているので
シェルのようなプログラミングも
ストレスなく書くことが出来る。

Pythonバンザイ

タイトルとURLをコピーしました