ファイルが存在する場合は削除したいfilename
。言うのが妥当か
if os.path.exists(filename):
os.remove(filename)
より良い方法はありますか?一行道?
ファイルが存在する場合は削除したいfilename
。言うのが妥当か
if os.path.exists(filename):
os.remove(filename)
より良い方法はありますか?一行道?
よりPython的な方法は次のようになります。
try:
os.remove(filename)
except OSError:
pass
これはさらに多くの行を必要とし、非常に見苦しいように見えますが、os.path.exists()
例外の過剰使用というPythonの規則に従って、不必要な呼び出しを回避します。
これを行うための関数を作成することは価値があるかもしれません:
import os, errno
def silentremove(filename):
try:
os.remove(filename)
except OSError as e: # this would be "except OSError, e:" before Python 2.6
if e.errno != errno.ENOENT: # errno.ENOENT = no such file or directory
raise # re-raise exception if a different error occurred
TOCTTOUバグを回避するために、ファイルの存在をチェックするよりも、例外を抑制することを好みます。マットの答えはこれの良い例ですが、Python 3 では以下を使用して少し単純化できますcontextlib.suppress()
。
import contextlib
with contextlib.suppress(FileNotFoundError):
os.remove(filename)
filename
が文字列ではなくオブジェクトの場合、を使用する代わりにそのメソッドをpathlib.Path
呼び出すことができます。私の経験では、パス オブジェクトは、ファイル システム操作の文字列よりも便利です。.unlink()
os.remove()
この回答のすべてが Python 3 専用であるため、アップグレードするもう 1 つの理由になります。
os.path.exists
True
ファイルだけでなくフォルダも返します。os.path.isfile
代わりに、を使用してファイルが存在するかどうかを確認することを検討してください。
アンディ・ジョーンズの答えの精神で、本物の三項演算はどうですか:
os.remove(fn) if os.path.exists(fn) else None
ファイル (または複数のファイル) が存在するかどうかを確認し、それを削除する別の方法は、モジュール glob を使用することです。
from glob import glob
import os
for filename in glob("*.csv"):
os.remove(filename)
Glob は、*nix ワイルドカードを使用してパターンを選択できるすべてのファイルを検索し、リストをループします。
このようなもの?短絡評価を利用します。ファイルが存在しない場合、条件全体を真にすることはできないため、Pythonは2番目の部分をわざわざ評価しません。
os.path.exists("gogogo.php") and os.remove("gogogo.php")