Удалить все файлы в каталоге - PullRequest
39 голосов
/ 24 июня 2009

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

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

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

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

Ответы [ 12 ]

54 голосов
/ 24 июня 2009

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

Для этого вы можете использовать shutil.rmtree() в каталоге.

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

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

14 голосов
/ 24 июня 2009

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

os.system('rm '+test)

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

import glob, os
test = '/path/*'
r = glob.glob(test)
for i in r:
   os.remove(i)
8 голосов
/ 24 июня 2009

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

4 голосов
/ 13 мая 2016

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

# 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) 
3 голосов
/ 24 июня 2009

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

1 голос
/ 08 мая 2019

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

import os
import shutil
shutil.rmtree('/home/me/test') 
os.mkdir('/home/me/test')
1 голос
/ 07 января 2019

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

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)
1 голос
/ 31 января 2013

Еще один способ сделать это:

os.popen('rm -f ./yourdir')
1 голос
/ 25 июня 2009

shutil.rmtree () для большинства случаев. Но это не работает в Windows для файлов только для чтения. Для 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
0 голосов
/ 10 марта 2015
#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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...