Pythonでファイルを削除する2つの方法!

Python Python

Pythonでファイルを削除する方法について書いています。
下記のメソッド・関数を使って削除します。

・osモジュールのremove関数
・Path.unlinkメソッド

載せているサンプルコードはPythonのバージョン3.10.5で動作検証しました。

os.removeでファイルを削除する

osモジュールのremove関数でファイルを削除することができます。
公式ドキュメントではこちらに記載がありました。

例えば、下記のように使います。

from os import remove

remove("hello.txt")

最初にosモジュールからremove関数をインポートしています。
次の処理で、remove関数に削除したいファイルパスを渡しています。

これで、remove関数が実行されると指定したパスのファイルが削除されます。
今回は実行ディレクトリと同じ位置にある「hello.txt」ファイルを削除しています。

ファイルがないとき

ファイルがないときには、下記のようにエラーになります。

FileNotFoundError: [Errno 2] No such file or directory: 'hello.txt'

FileNotFoundErrorが発生しました。
ファイルまたはディレクトリが見つからないというエラーになりました。

これを回避するためには、先にファイルがあるか確認すると良いです。
下記のようにすることで、ファイル削除前に存在するか確認することができます。

from os import remove
from os.path import isfile

if isfile("hello.txt"):
  remove("hello.txt")

isfile関数を使ってファイルがあるか確認しています。
ファイルがある場合はTrueになるので、配下のremove関数が実行されて、ファイルが削除されます。

ファイルがない場合は、remove関数は実行されないためエラーになりません。

Path.unlinkでファイルを削除する

Pathクラスのunlinkメソッドでファイルを削除することができます。
公式ドキュメントではこちらに記載がありました。

例えば、下記のように使います。

from pathlib import Path

path = Path("hello.txt")
path.unlink()

pathlibモジュールからPathクラスをインポートしています。
次の処理でPathクラスのコンストラクタにファイルのパスを渡して、pathオブジェクトを作成しています。

そして、pathからunlinkメソッドを呼ぶことで、ファイルが削除されます。
削除されるのは、Pathクラスに渡したパスのファイルです。

ファイルがないとき

こちらもファイルがないときには、下記のようにエラーになります。

FileNotFoundError: [Errno 2] No such file or directory: 'hello.txt'

ファイルがないときには、同じようにFileNotFoundErrorが発生しました。
こちらもPathクラスのメソッドを使って、存在を確認することにより回避することが可能です。

from pathlib import Path

path = Path("hello.txt")
if path.is_file():
  path.unlink()

先ほどの処理に、if文でファイルの存在を確認する処理を入れました。

pathオブジェクトからis_fileメソッドを呼んでいます。
このis_fileメソッドがファイルがある場合にはTrue、ない場合にはFalseを返してくれます。

ある場合には、if文の配下の処理が行われるので、unlinkメソッドが実行されてファイルが削除されます。

絶対パス・相対パスについて

今回os.remove関数やPathクラスには、削除したいファイルパスを相対パスで渡しました。
このファイルパスはルートディレクトリから指定して、下記のように絶対パスで指定することも可能です。

from os import remove

remove("/Users/xxx/python-test/hello.txt")

remove関数・unlinkメソッドのどちらでも、絶対パスで削除できることを確認しました。

おわりに

今回はPythonでファイルを削除する方法について確認しました。

osモジュールのremove関数と、pathlibモジュールのPathクラス(unlink)を使うことで、削除することができました。
個人的にはPathクラスの方が処理が見やすくなるので、こちらを優先して使うと良いのかなと感じました。

コメント

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