Как удалять файлы и папки с помощью Python

12 set 2022 3 min di lettura
Как удалять файлы и папки с помощью Python
Indice dei contenuti

Введение

В 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() и 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() для рекурсивного удаления каталога и всего его содержимого.

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

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.