Как удалить файлы и каталоги в Python

Удаление файлов и каталогов в Python

В Python есть несколько встроенных модулей, которые позволяют удалять файлы и каталоги.

В этом руководстве объясняется, как удалять файлы и каталоги с помощью функций из модулей os , pathlib и shutil .

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

В Python для удаления одного файла можно использовать os.remove() , os.unlink() , pathlib.Path.unlink() .

Модуль os обеспечивает портативный способ взаимодействия с операционной системой. Он доступен для Python 2 и 3.

Чтобы удалить один файл с помощью os.remove() , передайте путь к файлу в качестве аргумента:

 import os file_path = '/tmp/file.txt' os . remove ( file_path )

Функции os.remove() и os.unlink() семантически идентичны:

 import os file_path = '/tmp/file.txt' os . unlink ( file_path )

Если указанный файл не существует, выдаётся ошибка FileNotFoundError . Функции os.remove() и os.unlink() могут удалять только файлы, но не каталоги. Если указанный путь указывает на каталог, выдаётся ошибка IsADirectoryError .

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

Чтобы избежать ошибок при удалении файлов, вы можете использовать обработку исключений, чтобы перехватить исключение и отправить правильное сообщение об ошибке:

 import os file_path = '/tmp/file.txt' try : os . remove ( file_path ) except OSError as e : print ( "Error: %s : %s " % ( file_path , e . strerror ))

Модуль pathlib доступен в Python 3.4 и выше. Если вы хотите использовать этот модуль в Python 2, вы можете установить его с помощью pip. pathlib предоставляет объектно-ориентированный интерфейс для работы с путями к файловым системам в различных операционных системах.

Чтобы удалить файл с помощью модуля pathlib , создайте объект Path , указывающий на файл, и вызовите метод unlink() для объекта:

 from pathlib import Path file_path = Path ( '/tmp/file.txt' ) try : file_path . unlink () except OSError as e : print ( "Error: %s : %s " % ( file_path , e . strerror ))

pathlib.Path.unlink() , os.remove() и os.unlink() также можно использовать для удаления символической ссылки .

Сопоставление шаблонов

Вы можете использовать модуль glob для поиска нескольких файлов по шаблону. Например, чтобы удалить все файлы .txt в каталоге /tmp , используйте следующий код:

 import os import glob files = glob . glob ( '/tmp/*.txt' ) for f in files : try : f . unlink () except OSError as e : print ( "Error: %s : %s " % ( f , e . strerror ))

Чтобы рекурсивно удалить все файлы .txt в каталоге /tmp и всех его подкаталогах, передайте аргумент recursive=True функции glob() и используйте шаблон «**`:

 import os import glob files = glob . glob ( '/tmp/**/*.txt' , recursive = True ) for f in files : try : os . remove ( f ) except OSError as e : print ( "Error: %s : %s " % ( f , e . strerror ))

Модуль pathlib включает две функции glob, glob() и rglob() для поиска файлов в заданном каталоге. glob() ищет файлы только в каталоге верхнего уровня. rglob() ищет все файлы в этом каталоге и всех подкаталогах рекурсивно. Следующий пример кода удаляет все файлы .txt в каталоге /tmp :

 from pathlib import Path for f in Path ( '/tmp' ) . glob ( '*.txt' ): try : f . unlink () except OSError as e : print ( "Error: %s : %s " % ( f , e . strerror ))

Удаление каталогов (папок)

В Python вы можете использовать os.rmdir() и pathlib.Path.rmdir() для удаления пустого каталога и shutil.rmtree() для удаления непустого каталога.

В следующем примере показано, как удалить пустой каталог:

 import os dir_path = '/tmp/img' try : os . rmdir ( dir_path ) except OSError as e : print ( "Error: %s : %s " % ( dir_path , e . strerror ))

Альтернативно, вы можете удалить каталоги с помощью модуля pathlib :

 from pathlib import Path dir_path = Path ( '/tmp/img' ) try : dir_path . rmdir () except OSError as e : print ( "Error: %s : %s " % ( dir_path , e . strerror ))

Модуль shutil позволяет выполнять ряд высокоуровневых операций над файлами и каталогами.

С помощью функции shutil.rmtree() вы можете удалить указанный каталог, включая его содержимое:

 import shutil dir_path = '/tmp/img' try : shutil . rmtree ( dir_path ) except OSError as e : print ( "Error: %s : %s " % ( dir_path , e . strerror ))

Аргумент, переданный в shutil.rmtree() не может быть символической ссылкой на каталог.

Заключение

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

Мы показали вам, как использовать os.remove() , os.unlink() , pathlib.Path.unlink() для удаления отдельного файла, os.rmdir() и pathlib.Path.rmdir() для удаления пустого каталога и shutil.rmtree() для рекурсивного удаления каталога и всего его содержимого.

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

Если у вас есть вопросы или пожелания, не стесняйтесь оставлять комментарии.

питон

Связанные руководства

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *