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

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

OSError: [Errno 2] Никакой такой файл или каталог: '/home/me/test /*'

Код, который я выполняю:

import os
test = "/home/me/test/*"
os.remove(test)
42
задан nick 14 October 2019 в 22:47
поделиться

6 ответов

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

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

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

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

59
ответ дан 26 November 2019 в 23:36
поделиться

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

os.system('rm '+test)

В противном случае вы можете:

import glob, os
test = '/path/*'
r = glob.glob(test)
for i in r:
   os.remove(i)
16
ответ дан 26 November 2019 в 23:36
поделиться

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
1
ответ дан 26 November 2019 в 23:36
поделиться

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

7
ответ дан 26 November 2019 в 23:36
поделиться

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

3
ответ дан 26 November 2019 в 23:36
поделиться

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

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

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

0
ответ дан 26 November 2019 в 23:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: