ファイルやフォルダを作成したり削除したりする操作は、グラフィカルな画面でのクリック操作などはパソコンを使っていたら当然ですが、MacではUNIXコマンドでの操作もターミナルを駆使する人は当たり前のように使っていることでしょう。
Pythonでもそのような操作をosモジュールを通じて様々なことが可能となっています。
ここではPythonのosモジュールを使ったファイル操作を見ていきたいと思います
Pythonでファイルシステムの操作
とりあえず、作業ディレクトリにファイルを作成しておきます。ファイル名をexample.txtとします。withステートメントを使って作ればいいですよね。
with open("example.txt", "w") as f:
f.write("Python!\n")
中にはとりあえず「Python!」の文字列を入れてみました。ターミナルからでも、エディタにコードを書いて実行しても構いません。このファイルを操作していきます。
osモジュールのインポート
osモジュールをインポートしましょう。
import os
import shutil
shutilというモジュールもあとで使うので、ここで合わせてインポートしておきました。以降のコードではいちいちimportを書きませんがプログラミングには必要です。
現在のディレクトリの位置 – getcwd()
まず、現在のディレクトリの位置を調べてみます。MacやUNUXのターミナルコマンドではpwdと入力しますが、Pythonのosモジュールを使えば次のようにかけます。
print(os.getcwd())
getcwd()で取得することができます。
実行してみまます。(ファイル名os_module.pyとしてAtomで実行しています)
現在のディレクトリの位置がわかりました。
ファイルの操作
この中に先ほと作ったファイルがあるわけです。
ファイルの存在を確認 – exists()
でも、本当にファイルが存在するのでしょうか?
それを確認するにはexists()を使います。
print(os.path.exists("example.txt"))
実行します。
Trueと返ってきているのでファイルが存在することが確認できました。
ファイルなのかディレクトリなのか – isfile(), isdir()
では、次はこれがファイルなのか、それともディレクトリなのかを判定してみましょう。(まあ、ファイルを作成したのですからファイルには違いないのですが)
次のようにして対象を指定します。
print(os.path.isfile("example.txt"))
print(os.path.isdir("example.txt"))
ファイルであるかどうかはisfile()で、ディレクトリかどうかはisdir()で調べます。
では結果を見てみましょう。
それぞれTrue、Falseですから、ファイルであってディレクトリでは無いことがわかりました。
ファイルのコピー – shutil.copy()
このファイルを別のファイルとしてコピーを作ってみましょう。
それには次のコードで作成することができます。
shutil.copy("example.txt", "example2.txt") # import shutil が必要
ここでshutilのモジュールを使ってcopy()で、別のファイル名を指定して作ります。
ファイルの削除 – remove()
削除するにはremove()を使います。
os.remove("example2.txt")
ファイル名の書き換え – rename()
今度はファイル名を変えてみます。
ファイル名を変えるにはrename()を使います。
os.rename("example.txt", "renamed_example.txt")
変更するファイル名を指定してファイル名を変更しています。
シンボリックリンク – symlink()
次はシンボリックリンクを作ってみましょう。
symlink()を使って次のようにコードを書きます。
os.symlink("renamed_example.txt", "symlink_example.txt")
rename()と同じようにシンボリックリンク先のファイル名を指定して作ります。
この出来上がったファイルの中身はもちろんこの時点では一緒です。ここでrenamed_example.txtを開いて中身を書き換えたとします。すると symlink_example.txtの中身も同じように変わるのでやってみてください。
ディレクトリの操作
ファイルはこのくらいにして、次はディレクトリをやってみましょう。
ディレクトリを作る、削除する – mkdir(), rmdir()
ディレクトリを作るにはmkdir()、削除するにはrmdir()を使います。
os.mkdir("made_dir")
os.rmdir("made_dir")
それそれディレクトリ名を指定して、作成と削除ができます。
では、今度はディレクトリの中にさらにディレクトリを作ってみます。
os.mkdir("dir1")
os.mkdir("dir1/dir2")
ます1つ目のディレクトリを作って、その直下にもう1つのディレクトリを作るというコードになっています。一度にまとめて作るとエラーになります。親ディレクトリがあって初めて作ることができます。
ディレクトリの中身を見る – listdir()
ではここで作ってdir1の中身を見ることにしましょう。dir2が入ってるはずですが、それには次のコードで見ることができます。
print(os.listdir("dir1"))
listdir()でディレクトリを指定して、中身をリストで表示してくれます。
実行してみるとこうなります。
ディレクトリの中身をリスト型で取得することができています。
まとめ
ここではPythonでのシステム操作をosモジュールを通じて学びました。os、shulilモジュール以外にもpathlib、globなどのモジュールも合わせて調べてみると良いと思います。
当然ながらここで扱った以外のメソッドもあります。
UNIXコマンドと同じようなものが多いので合わせて理解しておくといいと思います。