Как удалить каталог атрибутов только для чтения с Python в Windows?

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

Когда я попытался удалить этот каталог с помощью команды shutil.rmtree(TEST_OBJECTS_DIR) , я получил следующее сообщение об ошибке.

  • hasattr () против блока try-except для обработки несуществующих атрибутов
  • Атрибуты функции Python - использование и злоупотребления
  • Почему добавление атрибутов к уже созданному объекту разрешено?
  • Шаблон PyCharm для класса python __init__
  • добавить элемент с атрибутами в minidom python
  • Python: разница между атрибутами класса и экземпляра
  •  WindowsError: [Error 5] Access is denied: 'C:\...\environment.txt' 
    • В: Как изменить атрибут всего в структуре всего каталога?

  • Атрибуты объекта Python - методология доступа
  • Не удалось получить действительное имя пути из python os.path.abspath
  • Как я могу назначить новый атрибут класса через __dict__ в python?
  • Как получить длинный путь файловой системы от python в Windows
  • Сигнал Python не работает даже на Cygwin?
  • Атрибуты класса и базового класса на основе Python?
  • 5 Solutions collect form web for “Как удалить каталог атрибутов только для чтения с Python в Windows?”

    Если вы используете shutil.rmtree, вы можете использовать член onerror этой функции для предоставления функции, которая принимает три параметра: функция, путь и информация об исключении. Вы можете использовать этот метод, чтобы пометить файлы только для чтения как доступные для записи, когда вы удаляете свое дерево.

     import os, shutil, stat def on_rm_error( func, path, exc_info): # path contains the path of the file that couldn't be removed # let's just assume that it's read-only and unlink it. os.chmod( path, stat.S_IWRITE ) os.unlink( path ) shutil.rmtree( TEST_OBJECTS_DIR, onerror = on_rm_error ) 

    Теперь, если быть справедливым, функция ошибки может быть вызвана по целому ряду причин. Параметр «func» может рассказать вам, какая функция «сбой» (os.rmdir () или os.remove ()). То, что вы здесь делаете, зависит от того, насколько вы хотите, чтобы ваш Rmtree был доказательством пули. Если это действительно случай, когда нужно отметить файлы как доступные для записи, вы можете сделать то, что я сделал выше. Если вы хотите быть более осторожным (т. Е. Определить, удаляется ли каталог не удаляется или если при попытке его удалить нарушение доступа к файлу), соответствующая логика должна быть вставлена ​​в функцию on_rm_error () ,

    Не проверено, но было бы, что-то вроде включения доступа для записи.

     import os, stat os.chmod(ur"file_path_name", stat.S_IWRITE) 

    Возможно, вам нужно будет объединить с os.walk, чтобы все разрешить запись. что-то вроде

     for root, dirs, files in os.walk(ur'root_dir'): for fname in files: full_path = os.path.join(root, fname) os.chmod(full_path ,stat.S_IWRITE) 

    Метод, который я использовал, должен делать:

     if os.path.exists(target) : subprocess.check_call(('attrib -R ' + target + '\\* /S').split()) shutil.rmtree(target) 

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

    Я не уверен, что происходит с атрибутами чтения / записи в каталогах. Но это еще не проблема.

    Принятый ответ почти прав, но он может выйти из строя в случае подкаталога только для чтения.

    Функция задается в качестве аргумента для обработчика onerror .

    Я бы предложил:

     import os, shutil, stat def remove_readonly(fn, path, excinfo): try: os.chmod(path, stat.S_IWRITE) fn(path) except Exception as exc: print "Skipped:", path, "because:\n", exc shutil.rmtree(TEST_OBJECTS_DIR, onerror=remove_readonly) 

    В случае сбоя функции вы можете увидеть причину и продолжить удаление.

     import win32con, win32api,os file='test.txt' #make the file hidden win32api.SetFileAttributes(file,win32con.FILE_ATTRIBUTE_HIDDEN) #make the file read only win32api.SetFileAttributes(file,win32con.FILE_ATTRIBUTE_READONLY) #to force deletion of a file set it to normal win32api.SetFileAttributes(file, win32con.FILE_ATTRIBUTE_NORMAL) os.remove(file) 

    копия с: http://code.activestate.com/recipes/303343-changing-file-attributes-on-windows/

    Python - лучший язык программирования в мире.