Удалить все файлы в каталоге

Попытка удалить все файлы в определенном каталоге приводит к следующей ошибке:

<code>OSError: [Errno 2] No such file or directory: '/home/me/test/*'
</code>

Код, который я запускаю:

<code>import os
test = "/home/me/test/*"
os.remove(test)
</code>
 sunqiang25 июн. 2009 г., 04:10
Официальный документ os.walk имеет демоверсию :) Docs.python.org / библиотека / os.html # os.walk

Ответы на вопрос(11)

#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() не работает с каталогом, аos.rmdir() будет работать только в пустой директории. И Python не будет автоматически расширять "/ home / me / test / *", как это делают некоторые оболочки.

Вы можете использоватьshutil.rmtree() в каталоге, чтобы сделать это, однако.

import shutil
shutil.rmtree('/home/me/test') 

будьте осторожны, поскольку это удаляет файлы и подкаталоги также

 Heikki Toivonen25 июн. 2009 г., 06:03
import shutil; shutil.rmtree ( '/ дом / мне / тест')
 James28 нояб. 2012 г., 11:54
Обратите внимание, что использование shutil.rmtree () также удалит папку в конце указанного пути (она не удаляет содержимое каталога, она удаляет каталог)
 Jean-François Fabre02 авг. 2017 г., 15:23
это не объясняет почему/home/me/test/* не принимаетсяos.remove. Я отредактировал ответ.

https: //stackoverflow.com/a/24844618/229330

Это длинное и уродливое, но надежное и эффективное решение.

Это решает несколько проблем, которые не решаются другими ответчиками:

Он правильно обрабатывает символические ссылки, в том числе не вызываетshutil.rmtree() по символической ссылке (которая будет проходить черезos.path.isdir() проверить, если он ссылается на каталог). Он хорошо обрабатывает файлы только для чтения.
 Jean-François Fabre02 авг. 2017 г., 15:19
В этом случае лучший способ - пометить как дубликат.

Другой способ сделать это:

os.popen('rm -f ./yourdir')
 Jean-François Fabre02 авг. 2017 г., 15:20
не портативный иrm -f directory просто не работает. Интересно, почему за это так много проголосовало.

я думаю, что никто не ответил с помощью этого подхода:

# 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) 
 Jean-François Fabre02 авг. 2017 г., 15:16
Плюс линияos.remove(f) for f in files не является допустимым синтаксисом. Не все используют понимание.
 deef20 апр. 2017 г., 21:36
Вам нужно указать полный путь к файлу при использованииos.remove(), так что тебе придется сделатьos.remove(os.path.join("/home/me/test", f)) чтобы это сработало.
 wmorrison36508 дек. 2017 г., 15:22
Мне очень нравится этот ответ, используяos звонки. Я использовал это в качестве основы моей работы:filesToRemove = [f for f in os.listdir(self.my_folder)] for f in filesToRemove: os.remove(os.path.join(self.my_folder, f)) (требуется отступ).
 monojohnny17 апр. 2018 г., 18:02
@ deef - я заново учел это требование.
 DJ_Stuffy_K16 февр. 2018 г., 01:42
что если я хочу использовать относительный путь? пожалуйста помог

подобной системе, вы можете:

os.system('rm '+test)

Еще можно:

import glob, os
test = '/path/*'
r = glob.glob(test)
for i in r:
   os.remove(i)
 Jean-François Fabre02 авг. 2017 г., 15:21
лучший ответ на данный момент:
 Roger Pate25 июн. 2009 г., 01:57
@ os.system есть много предостережений, в том числе не разрешающих шаблоны глобов (так как он просто передает строку в оболочку); glob возвращает каталоги, а также файлы (которые os.remove не обрабатывает)

енем "*" в каталоге / home / me / test. Используйте listdir, чтобы сначала получить список файлов, а затем вызовите remove для каждого из них.

Чтобы удалить с помощью символов подстановки, вам нужно написать собственную процедуру, которая обрабатывает это.

Есть несколько предложенных подходов указан на этой странице форума.

Импорт ОС:

BASE_DIR = os.path.dirname(os.path.abspath(__file__))
dir = os.path.join(BASE_DIR,"foldername")

Для root, dirs, файлы в os.walk (dir):

for file in files:
path = os.path.join(dir,file)
os.remove(path)

он просто пытается удалить файл с именем, оканчивающимся на звездочку

для файлов только для чтения. Для Windows импортируйте модули win32api и win32con из PyWin32.

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

Ваш ответ на вопрос