前回のおさらい
前々回よりosモジュールとshutilモジュールを比較するため、ファイル・フォルダ操作に関して解説をしています。
前回はファイルの作成方法、書き込み・読み込み方法に関して解説しました。
今回はファイル・フォルダの移動、名前の変更、削除に関して解説をしていきます。
前回までに2つのフォルダ(folder1、folder2)を作成し、さらに2つのファイル(document1.txt、document2.txt)を作成しているため、これまで使ってきた「os_module_test」フォルダはこんなフォルダ構造になっていると思います。
青色はフォルダ、赤色はファイルを示してみます。
今回も「os_module_test」内に新しいPythonプログラムを作成します。
そしてosモジュールをインポートしておいてください。
import os
そしてもう一つ「document2.txt」 をfolder2の中に移動しておいてください。
今回はこれをまた色々いじってみましょう。
フォルダ名・ファイル名の変更:os.rename(“変更前”, “変更後”)
フォルダ名の変更
最初はファイル・フォルダ名を変更してみます。
フォルダ名・ファイル名を変更するにはos.rename(“変更前の名前”, “変更後の名前”)とします。
ということでfolder1をfolder3に変更してみましょう。
os.rename("folder1", "folder3")
実行前はこんな感じ。
実行後はfolder1がfolder3に変わっています。
ちなみにこのまま再度実行するとfolder1がもうないので、エラーが出ます。
os.rename("folder1", "folder3")
実行結果
---------------------------------------------------------------------------
FileNotFoundError Traceback (most recent call last)
<ipython-input-8-2162288d4173> in <module>
----> 1 os.rename("folder1", "folder3")
FileNotFoundError: [Errno 2] No such file or directory: 'folder1' -> 'folder3'
folder1には何も入っていませんでしたが、フォルダの中に何かファイルが入っている場合はどうなるでしょうか。
folder2にはdocument2.txtが入っていますので、こちらのフォルダをfoder4に変更してみましょう。
os.rename("folder2", "folder4")
フォルダの中にファイルがあっても、名前を変更することができました。
ファイル名の変更
同様にしてファイル名を変更することもできます。
ということでdocument1.txtをdocument3.txtに変更してみましょう。
os.rename("document1.txt", "document3.txt")
もちろん変更前のファイル名に存在しないファイル名を指定したらエラーになります。
ということでこのままもう一度同じプログラムを実行してみましょう。
os.rename("document1.txt", "document3.txt")
実行結果
---------------------------------------------------------------------------
FileNotFoundError Traceback (most recent call last)
<ipython-input-11-303dbde5a8a4> in <module>
----> 1 os.rename("document1.txt", "document3.txt")
FileNotFoundError: [Errno 2] No such file or directory: 'document1.txt' -> 'document3.txt'
ファイル・フォルダの移動:os.rename(“変更前”, “変更後”)
ファイルの移動
実はファイル名・フォルダ名を変更するos.renameでファイルやフォルダを移動することも可能です。
その場合には、変更後の名前にパスも含めて記述します。
document3.txtをfolder4に移動してみます。
os.rename("document3.txt", "./folder4/document3.txt")
ちなみに変更後のフォルダ名 ”./folder4/document3.txt” の最初の”./”は現在のフォルダを示しており、これが無いとエラーとなります。
一度、document3.txtをos_module_testに戻して試してみます。
os.rename("document3.txt", "/folder4/document3.txt")
実行結果
---------------------------------------------------------------------------
FileNotFoundError Traceback (most recent call last)
<ipython-input-21-b963e721f9a9> in <module>
----> 1 os.rename("document3.txt", "/folder4/document3.txt")
FileNotFoundError: [Errno 2] No such file or directory: 'document3.txt' -> '/folder4/document3.txt'
また移動先にフォルダ名のみだとこちらもエラーとなります。
os.rename("document3.txt", "/folder4/")
実行結果
---------------------------------------------------------------------------
IsADirectoryError Traceback (most recent call last)
<ipython-input-4-47ebd8e4b0d6> in <module>
1 import os
2
----> 3 os.rename("document3.txt", "./folder4/")
IsADirectoryError: [Errno 21] Is a directory: 'document3.txt' -> './folder4/'
フォルダの移動
同様にしてフォルダも移動することができます。
folder3をfolder4の中に移動してみます。
os.rename("folder3", "./folder4/folder3")
フォルダも移動できました。
次の操作のために、folder3をfolder4の外に出しておきます。
次に逆にfolder4をfolder3に移動させてみます。
os.rename("folder4", "./folder3")
実行結果
---------------------------------------------------------------------------
OSError Traceback (most recent call last)
<ipython-input-4-ff6eacd84ba5> in <module>
1 import os
2
----> 3 os.rename("folder4", "./folder3")
OSError: [Errno 66] Directory not empty: 'folder4' -> './folder3'
今度はフォルダが空ではないので移動することはできないというエラーが発生してしまいました。
ファイルの削除:os.remove(“ファイル名”)
ファイルを削除する場合は、os.removeを使います。
ということでdocument1.txtを削除してみましょう。
os.remove("document3.txt")
しかしながらこのos.removeはファイルは削除できますが、フォルダは削除できません。
そのためfolder3をos.removeで削除しようとするとエラーとなります。
os.remove("folder3")
実行結果
---------------------------------------------------------------------------
PermissionError Traceback (most recent call last)
<ipython-input-26-0e094451a2f9> in <module>
----> 1 os.remove("folder3")
PermissionError: [Errno 1] Operation not permitted: 'folder3'
フォルダの削除:os.rmdir(“フォルダ名”)
フォルダを削除する場合はos.removeではなく、os.rmdirを使います。
ということでfolder3を削除してみましょう。
os.rmdir("folder3")
確かに削除できました。
ついでにfolder4も削除してみましょう。
os.rmdir("folder4")
実行結果
---------------------------------------------------------------------------
OSError Traceback (most recent call last)
<ipython-input-28-d82d83c50360> in <module>
----> 1 os.rmdir("folder4")
OSError: [Errno 66] Directory not empty: 'folder4'
しかしfolder4は削除することができません。
os.rmdirはフォルダが空の時だけ削除することができ、中に何か入っていると削除することができないのです。
ということはまずは中身を消して、その後、フォルダを消すということをしなければいけません。
しかしshutilモジュールを使うと中身が入っていようがいまいが一度に削除することができます。
ということで次回からshutilモジュールに関して解説していきたいと思います。
とりあえず今回はこんな感じで。
コメント