
В 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() для рекурсивного удаления каталога и всего его содержимого.
Будьте особенно осторожны при удалении файлов или каталогов, поскольку после удаления файл невозможно будет легко восстановить.
Если у вас есть вопросы или пожелания, не стесняйтесь оставлять комментарии.
Связанные руководства