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
ошибка FileNotFoundError
. И os.remove()
и os.unlink()
могут удалять только файлы, но не каталоги. Если указанный путь указывает на каталог, они IsADirectoryError
ошибку 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
модуля 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
модуля 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()
для удаления пустого файла. directory и shutil.rmtree()
для рекурсивного удаления каталога и всего его содержимого.
Будьте особенно осторожны при удалении файлов или каталогов, потому что после удаления файла его будет нелегко восстановить.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.