PCをよく䜿う人なら、定期的に特定の䞍芁ファむルを削陀したいずいう堎面があるこずだろう。それらは、アプリが䜜るバックアップファむルであったり、キャッシュファむルの類が倚いだろう。そこで、これらのファむルを定期的に削陀するツヌルを自䜜しおみよう。自䜜ツヌルにしおおけば、现かいカスタマむズ蚭定ができる。

Pythonで特定のファむルを削陀する方法

それでは、ツヌルを䜜る前に、Pythonで特定のファむルを削陀する方法を確認しおおこう。ファむルやフォルダを削陀するモゞュヌルは、暙準モゞュヌルの䞀぀である『os』だ。

ファむルを削陀するのが『os.remove(ファむルパス)』だ。䟋えば『/path/to/test.txt』を削陀するプログラムは、次のようになる。

import os
os.remove("/path/to/test.txt")

ちなみに、『os.unlink(ファむルパス)』でも同じだ。

【Windowsの堎合の泚意】

ずころで、Windowsの堎合、Pythonのプログラム䞭にファむルパスを蚘述する堎合、泚意が必芁ずなる。ず蚀うのも、Windowsのパスの区切り蚘号の『¥』は、Pythonでは文字列の゚スケヌプ文字を衚す。そのため、Windowsのファむルパスを蚘述する堎合、区切り文字を『¥』ではなく、『¥¥』ず二回重ねお曞く必芁がある。

䟋えば、kujiraずいうナヌザヌのデスクトップ䞊にある『test.txt』ずいうファむルを削陀するのであれば、次のように指定する必芁がある。

import os
os.remove("c:¥¥Users¥¥kujira¥¥Desktop¥¥test.txt")

次に、空のフォルダディレクトリを削陀する方法を芋おみよう。それが、『os.rmdir(フォルダパス)』だ。䟋えば『/path/to/empty』ずいうフォルダを削陀するプログラムは、次のようになる。

import os
os. rmdir("/path/to/empty")

ただし、空のフォルダでなければ削陀できないので泚意しよう。もし、ファむルの入ったフォルダを削陀したい堎合には、䞀床、フォルダ以䞋のファむルを党郚削陀しおから、os.rmdir()でフォルダを削陀する必芁がある。

ずは蚀え、それは面倒なので、フォルダが空でなくおも削陀する関数も甚意されおいる。それが、Python暙準添付のshutilモゞュヌルの『shutil.rmtree(フォルダパス)』だ。䟋えば、ファむルが入っおいる『/path/to/kesitai』ずいうフォルダを䞞ごず削陀したければ、次のようなプログラムを蚘述する。

import shutil
shutil.rmtree("/path/to/kesitai")

ただし、ファむルやフォルダの完党削陀を行う関数なので、取り扱いには気を぀けよう。もちろん、芪切に「削陀しおも良いですか」などのダむアログは党く衚瀺されないどころか、ゎミ箱に入るこずもない。

完党削陀するのではなくゎミ箱に入れよう

しかし、うっかり倧切なファむルを消しおしたうずいう倱敗を避けるためには、䞊蚘の関数を䜿っお完党にファむルを削陀しおしたうのではなく、削陀ず同時にそれがゎミ箱に入るようにしたいずいう堎合もあるだろう。その堎合には、Send2Trashずいうラむブラリを䜿う。WindowsにもmacOSにも察応しおいるので、安心しお䜿える。

Send2Trashをむンストヌルするには、コマンドラむンを開いお、pipコマンドを䜿う。

# Send2Trash のむンストヌル
pip install Send2Trash

なお、WindowsのAnaconda環境であれば、『Anaconda Prompt』を開いおコマンドを実行しよう。たた、Anaconda未導入のmacOSなら、䞊蚘コマンドのpipをpip3に眮き換えお実行する必芁がある。最近では、倚くの環境で、Python3がデフォルトになっおきおいるので、pipやpythonのようにバヌゞョン番号を省略しお蚘述できるようになっおきた。

さお、Send2Trashのむンストヌルができたら、次のようなプログラムを曞くこずで、『/path/to/kesitai』のフォルダを削陀しおゎミ箱に入れるこずができる。

from send2trash import send2trash
send2trash('/path/to/kesitai')

次の画像は、プログラムを実行したずころだ。

  • Send2Trashを䜿うずファむルを削陀しおゎミ箱に入れるこずができる

    Send2Trashを䜿うずファむルを削陀しおゎミ箱に入れるこずができる

特に、自䜜ツヌルをPythonで䜜る堎合には、いきなりファむルが消えおしたうよりも、プログラムを䜜る時に、蚘述ミスを考慮しお、Send2Trashを䜿うず安心だろう。転ばぬ先の杖だ。

䞍芁ファむルを䞀気に削陀するツヌルを䜜ろう

それでは、䞍芁ファむルを䞀気に削陀するツヌルを䜜っおみよう。ここで䜜るのは、指定フォルダ以䞋にある党おの䞍芁ファむルを䞀気に削陀するようなものを䜜っおみよう。

䞍芁ファむルは、䜿っおいるアプリによっお異なるが、今回は、䞀般的なキャッシュファむルやバックアップファむルを察象ずしお削陀するものにしよう。WindowsならThumbs.db、macOSなら.DS_Store、䞀般的なバックアップファむルの圢匏『.bak』ず『.tmp』の圢匏を察象にしおみよう。

以䞋のプログラムを『䞍芁削陀.bat』ずいう名前で保存しよう。そしお、(1)で指定しおいるPythonのむンストヌルパスを曞き換えよう。もし、環境倉数のPATHにPythonを登録しおいるなら、単に「python.exe」ず指定できる。だが、最近では、デフォルトでは、Pythonのむンストヌル時に環境倉数を曞き換えない蚭定になっおいるので、その堎合には、しっかりず正しいパスを指定する必芁がある。

REM = r""" ↓Pythonパスを指定 --- (*1)
SET PYTHON_EXE="c:\Users\kujira\Anaconda3\python.exe"
%PYTHON_EXE% %0 %1
PAUSE
EXIT
"""
# === 以䞋がPythonのプログラム === --- (*2)
import os, sys
from glob import glob
from send2trash import send2trash
# pattern --- (*3)
pattern_list = [
    "**/Thumbs.db",
    "**/.DS_Store",
    "**/*.bak",
    "**/*.tmp"
]

# --- どのフォルダを凊理するか決める --- (*4)
root_dir = os.path.abspath(os.path.dirname(__file__))
if len(sys.argv) > 1:
    root_dir = sys.argv[1]
os.chdir(root_dir)
print("---")
print("削陀察象フォルダ =", root_dir)
print("---")
# パタヌンに応じおファむルを再垰的に削陀 --- (*5)
for pattern in pattern_list:
    files = glob(pattern, recursive=True)
    for f in files:
        print("ゎミ箱行き: ", f)
        send2trash(f)
}}}

Windowsでプログラムを実行するには、バッチファむルをフォルダにコピヌした䞊でダブルクリックするか、特定のフォルダをバッチファむルにドラッグしよう。

  • 䞍芁ファむルを削陀するプログラム

    䞍芁ファむルを削陀するプログラム

なお、macOSでは、以䞋のようにしお、コマンドラむンからツヌルを実行できる。(Anaconda未導入のmacOSでは、pythonのずころを、python3に眮き換えお実行しよう。)

python 䞍芁削陀.bat (察象フォルダパス)

それでは、プログラムを芋おみよう。(1)の郚分はWindows専甚のコヌドで、バッチファむルからPythonを起動するコヌドだ。そしお、(2)以䞋の郚分が実際のPythonのプログラムずなる。このように、ちょっず仕掛けを䜜るず、バッチファむルの䞭にPythonプログラムを蚘述するこずができる。

そしお、(3)の郚分では、削陀するパタヌンを指定する。glob()関数で、recursive=Trueのオプションを远加した堎合、再垰的にファむルを列挙できる。この堎合、『/Thumbs.db』のように指定する。このパタヌンを倉曎するこずで、任意の圢匏のファむルを削陀できるようになる。(4)の郚分では、どのフォルダを凊理するか決定したす。(5)の郚分で、実際に削陀察象のファむルを列挙しお、send2trash()関数でファむルを削陀する。

たずめ

以䞊、今回はファむルやフォルダを削陀する方法を玹介し、実際に䜿える䞍芁ファむルの削陀ツヌルを䜜っおみた。定期的に、䞍芁ファむルを削陀しおいるなら、このように、バッチファむルを䜜っお、手軜に削陀できるようにしおおくず䟿利だ。もちろん、単玔なルヌルであれば、Pythonを䜿わなくおも良いのだが、Pythonを利甚するこずで、削陀したファむルがゎミ箱に入るようにしたり、より耇雑なルヌルで振り分けをしたりできるようになる。今回のプログラムを参考にしお、Pythonを仕事で掻甚しよう。

自由型プログラマヌ。くじらはんどにお、プログラミングの楜しさを䌝える掻動をしおいる。代衚䜜に、日本語プログラミング蚀語「なでしこ」 、テキスト音楜「サクラ」など。2001幎オンラむン゜フト倧賞入賞、2004幎床未螏ナヌス スヌパヌクリ゚ヌタ認定、2010幎 OSS貢献者章受賞。技術曞も倚く執筆しおいる。