Подтвердить что ты не робот

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

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

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

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

import os
test = "/home/me/test/*"
os.remove(test)
4b9b3361

Ответ 1

os.remove() не работает в каталоге, а os.rmdir() работает только в пустом каталоге. И Python не будет автоматически расширять "/home/me/test/*", как это делают некоторые оболочки.

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

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

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

Ответ 2

os.remove не разрешает шаблоны в стиле unix. Если вы используете Unix-подобную систему, вы можете:

os.system('rm '+test)

Иначе вы можете:

import glob, os
test = '/path/*'
r = glob.glob(test)
for i in r:
   os.remove(i)

Ответ 3

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

Ответ 4

Хотя это старый вопрос, я думаю, что никто не ответил, используя этот подход:

# 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) 

Ответ 5

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

Ответ 6

shutil.rmtree() для большинства случаев. Но это не работает в Windows для файлов readonly. Для 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

Ответ 7

Еще один способ, которым я это сделал:

os.popen('rm -f ./yourdir')

Ответ 8

Это позволит получить все файлы в каталоге и удалить их.

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)

Ответ 9

Немного хак, но если вы хотите сохранить каталог, можно использовать следующее.

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

Ответ 10

os.remove удалит только один файл.

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

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

Ответ 11

Пожалуйста, см. мой ответ здесь:

fooobar.com/questions/10881/...

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

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

  • Он правильно обрабатывает символические ссылки, в том числе не вызывая shutil.rmtree() по символической ссылке (которая пройдет тест os.path.isdir(), если она ссылается на каталог).
  • Он отлично обрабатывает файлы только для чтения.

Ответ 12

#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