Не удается удалить папку с помощью os.remove (WindowsError: [Ошибка 5] Доступ запрещен: 'c:/temp/New Folder')

Я работаю над тестовым набором, для которого я создаю несколько подкаталогов. Тем не менее, я, кажется, не имею разрешения удалить их больше. Мой UA - учетная запись администратора (Windows XP).

Я впервые попробовал:

folder="c:/temp/" 
for dir in os.listdir(folder): 
    os.remove(folder+dir)

а потом

folder="c:/temp/" 
os.remove(folder+"New Folder")

потому что я уверен, что "Новая папка" пуста. Однако во всех случаях я получаю:

Traceback (most recent call last): 
  File "<string>", line 3, in <module> 
WindowsError: [Error 5] Access is denied: 'c:/temp/New Folder'

Кто-нибудь знает, что идет не так?

14 ответов

os.remove требует путь к файлу и поднимаетOSErrorесли путь являетсякаталогом.

Пытатьсяos.rmdir(folder+'New Folder')

Который будет:

Удалить (удалить) путь к каталогу. Работает только когда каталог пуст, в противном случае вызывается OSError.

Создание путей также безопаснее при использованииos.path.join:

os.path.join("c:\\", "temp", "new folder")

Попробуй встроенный шутиль модуль

shutil.rmtree(folder+"New Folder")

это рекурсивно удаляет каталог, даже если у него есть содержимое.

Для Python 3.6 режим доступа к файлу должен быть 0o777:

os.chmod(filePath, 0o777)
os.remove(filePath)

os.remove() работает только на файлы. Это не работает на каталогах. Согласно документации:

os.remove (путь) Удалить (удалить) путь к файлу. Если путь является каталогом, OSError повышается; см. rmdir() ниже, чтобы удалить каталог. Это идентично функции unlink(), описанной ниже. В Windows попытка удалить используемый файл приводит к возникновению исключения; в Unix запись каталога удаляется, но хранилище, выделенное для файла, становится недоступным, пока исходный файл больше не используется.

использование os.removedir() для каталогов

Вы можете использовать модуль Shutil, чтобы удалить каталог и его подпапки

import os
import shutil

for dir in os.listdir(folder):
    shutil.rmtree(os.path.join(folder,dir))

Использовать os.rmdir вместо os.remove удалить папку

      os.rmdir("d:\\test")

Это удалит тестовую папку из d:\\ каталог

Если вы хотите удалить папку, вы можете использовать

os.rmdir(path)

Если это каталог, просто используйте:

os.rmdir("path")
      import os
import shutil


dir = os.listdir(folder)
for file in dir:
    if os.path.isdir(f'{folder}\\{file}'):
       shutil.rmtree(os.path.join(f'{folder}\\{file}'))
    else:
       os.remove(f'{folder}\\{file}')

Причина, по которой вы не можете удалять папки, потому что для удаления подпапки на диске C: вам нужны права администратора. Вызовите права администратора в python или выполните следующую попытку

Создайте простой.bat файл с помощью следующей команды оболочки

del /q "C:\Temp\*"

FOR /D %%p IN ("C:\temp\*.*") DO rmdir "%%p" /s /q

Сохраните его как file.bat и вызовите этот bat-файл из вашего файла python

Bat файл будет обрабатывать удаление подпапок с диска C:

В моем случае это было связано с отсутствием прав администратора. Я решил это, запустив терминал или cmd от имени администратора.

ключ Windows -> cmd -> щелкните правой кнопкой мыши -> запустить от имени администратора

Файл находится в режиме только для чтения, поэтому измените разрешение файла с помощью os.chmod() функции, а затем попробуйте с os.remove(),

Пример:

Изменить разрешение файла на 0777 а затем удалите файл.

os.chmod(filePath, 0777)
os.remove(filePath)

Не удается удалить папку с помощью os.remove

      import os

if os.path.exists("demofile.txt"):
  os.remove("demofile.txt")
else:
  print("The file does not exist")

У меня такая же проблема в ОС серверной версии. Но эта проблема не касалась ОС типа рабочей станции. Я добавляю следующий простой код (os.chmod), и проблема исчезает:

      import os
import stat

os.chmod(file, stat.S_IWRITE)
os.remove(file)
Другие вопросы по тегам