Python Academy · Урок

shutil для операций с файлами

Копируйте, перемещайте и архивируйте файлы

Урок 4 из 413 шагов

«shutil для операций с файлами» — бесплатный урок Python Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python Academy содержит 4 уроков всего.

Что такое shutil?

Модуль shutil (утилиты оболочки) предоставляет высокоуровневые операции с файлами: копирование, перемещение, удаление деревьев каталогов и создание архивов. Он расширяет возможности os для повседневных задач.

import shutil, os

os.makedirs('/tmp/shutil_demo', exist_ok=True)
with open('/tmp/shutil_demo/a.txt', 'w') as f:
    f.write('hello')
print('created a.txt')

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

shutil.copy(src, dst) копирует содержимое файла и его разрешения в новое место.

import shutil, os

os.makedirs('/tmp/shutil_demo', exist_ok=True)
with open('/tmp/shutil_demo/src.txt', 'w') as f:
    f.write('data')
shutil.copy('/tmp/shutil_demo/src.txt', '/tmp/shutil_demo/copy.txt')
print(os.path.exists('/tmp/shutil_demo/copy.txt'))

copy и copy2

shutil.copy2 работает так же, как copy, но также сохраняет метаданные, например временные метки. Используйте её, когда важно время изменения файла.

import shutil, os

os.makedirs('/tmp/shutil_demo', exist_ok=True)
with open('/tmp/shutil_demo/m.txt', 'w') as f:
    f.write('x')
shutil.copy2('/tmp/shutil_demo/m.txt', '/tmp/shutil_demo/m2.txt')
print('copied with metadata')

Копирование всего дерева

shutil.copytree(src, dst) рекурсивно копирует весь каталог. Каталог назначения не должен существовать заранее (если только Вы не передадите dirs_exist_ok=True).

import shutil, os

os.makedirs('/tmp/tree_src/sub', exist_ok=True)
with open('/tmp/tree_src/sub/f.txt', 'w') as f:
    f.write('hi')
shutil.rmtree('/tmp/tree_dst', ignore_errors=True)
shutil.copytree('/tmp/tree_src', '/tmp/tree_dst')
print(os.path.exists('/tmp/tree_dst/sub/f.txt'))

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

shutil.move(src, dst) перемещает или переименовывает файл либо каталог. Она работает между файловыми системами, где os.rename завершился бы ошибкой.

import shutil, os

os.makedirs('/tmp/move_demo', exist_ok=True)
with open('/tmp/move_demo/old.txt', 'w') as f:
    f.write('move me')
shutil.move('/tmp/move_demo/old.txt', '/tmp/move_demo/new.txt')
print(os.path.exists('/tmp/move_demo/new.txt'))

Удаление дерева каталогов

shutil.rmtree(path) удаляет каталог и всё его содержимое. Используйте её осторожно: отменить действие невозможно.

import shutil, os

os.makedirs('/tmp/to_delete/inner', exist_ok=True)
shutil.rmtree('/tmp/to_delete')
print('exists after rmtree:', os.path.exists('/tmp/to_delete'))

ignore_errors и безопасность

Передача ignore_errors=True в rmtree предотвращает сбой, если путь отсутствует; это удобно для очистки перед новым запуском.

import shutil

shutil.rmtree('/tmp/never_existed', ignore_errors=True)
print('no error even though path was absent')

Создание архива

shutil.make_archive(base_name, format, root_dir) одним вызовом упаковывает каталог в файл формата zip или tar.

import shutil, os

os.makedirs('/tmp/arch_src', exist_ok=True)
with open('/tmp/arch_src/data.txt', 'w') as f:
    f.write('archive me')
path = shutil.make_archive('/tmp/my_archive', 'zip', '/tmp/arch_src')
print('created', os.path.basename(path))

Распаковка архива

shutil.unpack_archive(filename, extract_dir) выполняет обратную операцию, распаковывая zip- или tar-архив в папку.

import shutil, os

shutil.make_archive('/tmp/box', 'zip', '/tmp/arch_src')
shutil.unpack_archive('/tmp/box.zip', '/tmp/unpacked')
print(os.listdir('/tmp/unpacked'))

Поиск исполняемых файлов

shutil.which(name) находит программу в системном PATH, подобно команде оболочки which. Она возвращает полный путь или отсутствующее значение.

import shutil

print(shutil.which('python3'))
print(shutil.which('definitely_not_a_real_program'))

Использование диска

shutil.disk_usage(path) сообщает общий объём, занятое и свободное пространство в байтах для файловой системы, содержащей указанный путь.

import shutil

usage = shutil.disk_usage('/')
print('total GB:', round(usage.total / 1e9, 1))
print('free GB:', round(usage.free / 1e9, 1))

Быстрая проверка

Проверьте своё понимание shutil.

Итоги

Вы изучили shutil для работы с файлами:

  • copy/copy2 копируют файлы; copytree копирует целые деревья.
  • move переименовывает или перемещает объекты; rmtree удаляет деревья.
  • make_archive/unpack_archive работают с форматами zip и tar.
  • which и disk_usage получают сведения о системе.

Следующий курс: создание инструментов командной строки с помощью argparse.

Можно начать бесплатно

Изучай Python с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
76
Уроки
320

Часто задаваемые вопросы

Урок «shutil для операций с файлами» бесплатный?

Да — полный текст урока «shutil для операций с файлами» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python Academy, подпишись на CoddyKit PRO. Курс Python Academy содержит 4 уроков всего.

Чему я научусь в уроке «shutil для операций с файлами»?

Копируйте, перемещайте и архивируйте файлы Ты практикуешь Python Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Python Academy?

Предыдущий опыт не требуется. Python Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «shutil для операций с файлами»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Python Academy?

Да. Каждый урок Python Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Запуск команд с subprocess
  2. Перехват вывода
  3. Окружение и модуль os
  4. shutil для операций с файлами
← Назад к Python Academy