Удаление файлов python 3

Удаление файлов python 3

Как удалить файл или папку в Python?

10 ответов

os.rmdir() удаляет пустой каталог.

shutil.rmtree() удаляет каталог и все его содержимое.

pathlib.Path.unlink() удаляет файл или символическую ссылку.

Синтаксис Python для удаления файла

Лучшая практика

  1. Сначала проверьте, существует ли файл или папка, а затем удалите только этот файл. Это может быть достигнуто двумя способами:
    а. os.path.isfile("/path/to/file")
    б. Используйте exception handling.

ПРИМЕР для os.path.isfile

Обработка исключений

РЕСПЕКТИВНЫЙ ВЫХОД

Синтаксис Python для удаления папки

Пример для shutil.rmtree()

(См. Полную документацию по шутилу ) и / или

(Полная документация на ОС .)

Для удаления файлов:

Вы можете использовать unlink или remove .

Эта функция удаляет (удаляет) путь к файлу. Если путь является каталогом, OSError повышается.

В Python 2, если путь не существует, OSError с [Errno 2] ( ENOENT ). В Python 3 вызывается FileNotFoundError с [Errno 2] ( ENOENT ). В Python 3, поскольку FileNotFoundError является подклассом OSError , OSError последнего перехватит первый.

Для удаления папок:

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

shutil.rmtree Удалить все дерево каталогов. Путь должен указывать на каталог (но не символическую ссылку на каталог).

Если ignore_errors — true, ошибки, возникшие в результате неудачного удаления, будут игнорироваться, а если false или пропущены, такие ошибки обрабатываются путем вызова обработчика, указанного в onerror, или, если он пропущен, они вызывают исключение.

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

Проверка существования файла

Избежать досадных ошибок при работе с текстовым документом, которые могут быть связаны с его отсутствием на жестком диске компьютера, поможет метод exists из модуля os. Его вызов позволяет проверить в Python существование файла по указанному пути, получив в качестве результирующего ответа булево значение True или False. Чтобы воспользоваться данным методом, необходимо прежде всего подключить библиотеку os, а затем вызвать exists у класса path. Следующий пример на Python показывает проверку наличия файлов test.txt и test10.txt в корневом каталоге жесткого диска D. Функция print показывает, что в наличии на D только первый документ.

Иногда при работе с документами возникает потребность в проверке не только существования некоего объекта по заданному пути. Функция isfile из уже упомянутой здесь библиотеки os дает программисту возможность убедиться в том, что полученный по определенному адресу объект на жестком диске компьютера является файлом, а не папкой. Данный метод также находится в классе path. В следующем примере показывается реакция isfile на получение в качестве аргумента файла test.txt и каталога folder в корне D. Как видно из результатов работы функции print, в первом случае отображается True, а затем False.

Проверить наличие файла по указанному адресу можно и с помощью функции open, применив дополнительно конструкцию with as. Данный метод производит открытие документа для того, чтобы программа могла взаимодействовать с его содержимым. Если функция open смогла без ошибок выполниться, это означает, что по переданному ей в качестве аргумента пути имеется файл. Если же произойдет исключение, то файл не удалось открыть. Это еще не говорит о том, что его нету. Возможно, к примеру, не достаточно прав доступа к нему. В приведенном ниже примере программа сообщает о наличии искомого документа при помощи метода print. Как видно из результатов, на экран выводится сообщение file is open.

Читайте также:  Daemon tools что делает

Копирование файла

Библиотека под названием shutil включает в себя несколько полезных функций для создания копий объектов на жестком диске. Чтобы быстро скопировать файл в исходный каталог, стоит воспользоваться методом copyfile, предварительно подключив модуль shutil. В роли первого аргумента здесь выступает оригинальный документ, в то время как вторым параметром нужно поставить предполагаемый новый файл. Стоит учитывать, что копируется только содержимое, но не метаданные. В следующем примере происходит копирование данных из файла test.txt в test2.txt на диске D. Функция copyfile также возвращает адрес созданного документа.

Встроенный метод copy из модуля shutil позволяет в Python копировать файл в указанную папку, сохраняя при этом его изначальное имя. Приведенный ниже пример кода демонстрирует копирование информации из test.txt в объект, который находится на диске D в каталоге под названием folder. Как и в предыдущем случае с функцией copyfile, переносятся только внутренние данные, но не сведения о дате создания и редактирования документа.

Чтобы полностью скопировать информацию из текстового файла, а также все сведения о нем, необходимо воспользоваться готовым методом copy2. Способ его применения такой же, как и в случае с функцией copy. На месте первого параметра здесь размещается адрес изначального файла, в то время как второй аргумент сообщает локацию и название нового документа. Ниже показан пример, где содержимое и метаданные копируются в test2.txt из папки folder.

Удаление файла

Избавиться от объекта, если известно его имя и точное расположение на диске, очень легко. С этой задачей поможет справиться метод remove из уже упомянутой ранее библиотеки os. Все, что требуется сделать, это передать ей в качестве параметра полный адрес ненужного файла, не забыв для начала подключить модуль os. Ниже приведен пример того, как с помощью скрипта Python удалить файл test.txt в корне диска D.

Получение размера файла

Определить точный размер любого объекта на жестком диске можно с помощью стандартной функции getsize из модуля os, которая возвращает величину файла в байтах. Выполнив импорт библиотеки os, необходимо вызвать метод класса path. Аргументом тут выступает расположение документа в памяти компьютера. Согласно результатам выполнения getsize, размер test.txt составляет 7289. Метод print выводит это на экран.

Вычислить размер файла в Python можно и другим способом, открыв его при помощи open, после чего вызвав функцию seek. Ей необходимо передать в качестве параметра область для чтения данных, начиная от начала файла до его конца. В итоге следует вызвать метод tell через ссылку на текстовый файл, а затем отправить результат его работы в print для вывода в консоль.

Переименование файла

Изменить название документа можно не только благодаря средствам системы, но и с помощью готовых функций модуля os. С этой задачей хорошо справляется метод rename, принимающий в качестве параметров исходное и новое имя файла. Следующий пример показывает работу с документом test.txt в корневом каталоге диска D, который переименовывается в test1.txt.

Читайте также:  Android beam что это

Аналогично, можно в Python переименовать файл с помощью метода move из модуля shutil. Подключив данную библиотеку, достаточно лишь передать функции местоположение и новое имя документа. Код программы, где продемонстрировано переименование test.txt в test1.txt, находится ниже.

Таким образом, главные операции по взаимодействию с файлами в языке Python выполняются при помощи нескольких встроенных библиотек, в число которых входят os и shutil. Функции этих модулей позволяют осуществлять проверку на наличие файла на диске, копировать его в нескольких разных режимах, а также удалять, переименовывать и отображать размер.

Как я могу удалить содержимое локальной папки в Python?

Текущий проект предназначен для Windows, но я хотел бы также видеть * nix.

21 ответ

Обновлен для удаления только файлов и использования метода os.path.join() , предложенного в комментариях. Если вы также хотите удалить подкаталоги, раскомментируйте оператор elif .

Это нужно сделать, просто используя модуль OS для составления списка, а затем удалить!

Сработало для меня, любые проблемы, дайте мне знать!

Довольно интуитивный способ сделать это:

Используйте метод ниже, чтобы удалить содержимое каталога, а не сам каталог:

Если предположить, что temp_dir будет удалено, однострочная команда, использующая os , будет выглядеть следующим образом:

Примечание. Это всего лишь 1 строка для удаления файлов «Не удаляет каталоги.

Надеюсь, это поможет. Спасибо.

Ответьте за ограниченную, специфическую ситуацию: если вы хотите удалить файлы при сохранении дерева подпапок, вы можете использовать рекурсивный алгоритм:

Может быть, немного не по теме, но я думаю, что многие нашел бы это полезным

Я решил проблему с rmtree makedirs , добавив time.sleep() между:

Если вы используете систему * nix, почему бы не использовать системную команду?

Еще одно решение:

Я использовал для решения проблемы таким образом:

Просто сделай это. Это удалит все файлы внутри каталога, а также из подкаталогов. Без вреда для любой папки / каталога. Хорошо работает на Ubuntu без каких-либо ошибок.

Я знаю, что это старая ветка, но я нашел кое-что интересное на официальном сайте python. Просто для того, чтобы поделиться другой идеей удаления всего содержимого в каталоге. Потому что у меня есть некоторые проблемы с авторизацией при использовании shutil.rmtree (), и я не хочу удалять каталог и создавать его заново. Оригинал адреса: http://docs.python.org/2/library/os.html#os.walk . Надеюсь, что это может кому-то помочь.

Я удивлен, что никто не упомянул о потрясающем pathlib , чтобы сделать эту работу.

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

Для рекурсивного удаления каталогов вы можете написать что-то вроде этого:

Возможно, вам лучше использовать os.walk() для этого.

os.listdir() не отличает файлы от каталогов, и вы быстро столкнетесь с проблемами, пытаясь отсоединить их. Есть хороший пример использования os.walk() для рекурсивного удаления каталога здесь и подсказок о том, как адаптировать его к вашим обстоятельствам.

В предыдущем комментарии также упоминается использование os.scandir в Python 3.5+. Например:

Это пока единственный ответ, который:

  • удаляет все символические ссылки
  • мертвые ссылки
  • ссылки на каталоги
  • ссылки к файлам
Читайте также:  Сканер слайдов своими руками
  • удаляет подкаталоги
  • не удаляет родительский каталог
  • Столько другие ответы, это не пытается настроить разрешения, чтобы разрешить удаление файлов / каталогов.

    Использование rmtree и воссоздание папки может работать, но я столкнулся с ошибками при удалении и немедленном воссоздании папок на сетевых дисках.

    Предлагаемое решение с использованием Walk не работает, так как использует rmtree для удаления папок, а затем может попытаться использовать os.unlink для файлов, которые ранее были в этих папках. Это вызывает ошибку.

    Опубликованное решение glob также попытается удалить непустые папки, что приведет к ошибкам.

    Я предлагаю вам использовать:

    Расширяя ответ mhawke, это то, что я реализовал. Он удаляет все содержимое папки, но не саму папку. Протестировано на Linux с файлами, папками и символическими ссылками, должно работать и на Windows.

    Вы можете просто сделать это:

    Конечно, вы можете использовать другой фильтр в вашем пути, например: /YOU/PATH/*.txt для удаления всех текстовых файлов в каталоге.

    Попробуйте модуль shutil

    Описание: shutil.rmtree(path, ignore_errors=False, onerror=None)

    Строка документации: рекурсивное удаление дерева каталогов.

    Если установлено ignore_errors , ошибки игнорируются; в противном случае, если установлено onerror , оно вызывается для обработки ошибки с аргументами (func, path, exc_info) , где func равно os.listdir , os.remove или os.rmdir ; путь — это аргумент этой функции, который вызвал ее сбой; и exc_info — кортеж, возвращенный sys.exc_info() . Если ignore_errors ложно и onerror равно None , возникает исключение.

    Важное примечание: Имейте в виду, что shutil.rmtree() не просто удаляет содержимое целевой папки. Также удаляет саму папку.

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

    1. Всем нравятся короткие и простые ответы. Однако иногда реальность не так проста.
    2. Вернуться к моему ответу. Я знаю, что shutil.rmtree() можно использовать для удаления дерева каталогов. Я использовал это много раз в моих собственных проектах. Но вы должны понимать, что сам каталог также будет удален с помощью shutil.rmtree() . Хотя это может быть приемлемо для некоторых, это неправильный ответ для удаления содержимого папки (без побочных эффектов) .
    3. Я покажу вам пример побочных эффектов. Предположим, что у вас есть каталог с настроенными владельцем и битами режима, где много содержимого. Затем вы удаляете его с помощью shutil.rmtree() и восстанавливаете его с помощью os.mkdir() . И вместо этого вы получите пустой каталог с по умолчанию (унаследованным) владельцем и битами режима. Несмотря на то, что у вас может быть право удалять содержимое и даже каталог, вы не сможете установить первоначальные биты владельца и режима в каталоге (например, вы не являетесь суперпользователем).
    4. Наконец, наберитесь терпения и прочитайте код . Это долго и некрасиво (видно), но доказано, что оно надежно и эффективно (используется).

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

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

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

    Вот код (единственная полезная функция — clear_dir() ):

    Ссылка на основную публикацию
    Adblock detector