特定のディレクトリ内のすべてのファイルを削除しようとすると、次のエラーが発生します。
OSError: [Errno 2] No such file or directory: '/home/me/test/*'
私が実行しているコードは次のとおりです。
import os
test = "/home/me/test/*"
os.remove(test)
os.remove()
はディレクトリでは機能せず、os.rmdir()
は空のディレクトリでのみ機能します。また、Pythonは、一部のシェルのように「/ home/me/test/*」を自動的に展開しません。
ただし、ディレクトリでshutil.rmtree()
を使用してこれを行うことができます。
import shutil
shutil.rmtree('/home/me/test')
ファイルも削除されるので注意してくださいおよびサブディレクトリも同様です。
os.removeは、UNIXスタイルのパターンを解決しません。 UNIXのようなシステムを使用している場合、次のことができます。
os.system('rm '+test)
それ以外の場合:
import glob, os
test = '/path/*'
r = glob.glob(test)
for i in r:
os.remove(i)
*はシェル構造であるため。 Pythonはディレクトリ/ home/me/testで「*」という名前のファイルを文字通り探しています。listdirを使用して最初にファイルのリストを取得し、次に各ファイルでremoveを呼び出します。
これは古い質問ですが、このアプローチを使用してまだ誰も回答していないと思います。
# python 2.7
import os
d='/home/me/test'
filesToRemove = [os.path.join(d,f) for f in os.listdir(d)]
for f in filesToRemove:
os.remove(f)
starはUnix Shellによって展開されます。呼び出しはシェルにアクセスしていません。名前がスターで終わるファイルを削除しようとしているだけです
ちょっとしたハックですが、ディレクトリを保持したい場合は、以下を使用できます。
import os
import shutil
shutil.rmtree('/home/me/test')
os.mkdir('/home/me/test')
これにより、ディレクトリ内のすべてのファイルが取得され、削除されます。
import os
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
dir = os.path.join(BASE_DIR, "foldername")
for root, dirs, files in os.walk(dir):
for file in files:
path = os.path.join(dir, file)
os.remove(path)
私がこれをやった別の方法:
os.popen('rm -f ./yourdir')
ほとんどの場合、shutil.rmtree()。ただし、Windowsでは読み取り専用ファイルでは機能しません。 Windowsの場合、PyWin32からwin32apiおよびwin32conモジュールをインポートします。
def rmtree(dirname):
retry = True
while retry:
retry = False
try:
shutil.rmtree(dirname)
except exceptions.WindowsError, e:
if e.winerror == 5: # No write permission
win32api.SetFileAttributes(dirname, win32con.FILE_ATTRIBUTE_NORMAL)
retry = True
ここで私の答えをご覧ください:
https://stackoverflow.com/a/24844618/2293304
長くてandいですが、信頼性が高く効率的なソリューションです。
他の回答者が対処していないいくつかの問題を解決します。
shutil.rmtree()
を呼び出さないなど、シンボリックリンクを正しく処理します(ディレクトリにリンクする場合、os.path.isdir()
テストに合格します)。#python 2.7
import tempfile
import shutil
import exceptions
import os
def TempCleaner():
temp_dir_name = tempfile.gettempdir()
for currentdir in os.listdir(temp_dir_name):
try:
shutil.rmtree(os.path.join(temp_dir_name, currentdir))
except exceptions.WindowsError, e:
print u'Не удалось удалить:'+ e.filename
os.removeは、単一のファイルのみを削除します。
ワイルドカードを使用して削除するには、これを処理する独自のルーチンを作成する必要があります。
このフォーラムのページには かなりの数の提案されたアプローチ がリストされています。