shutil для операций с файлами
Копируйте, перемещайте и архивируйте файлы
«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 — локальная установка не требуется.
Все уроки этого курса
- Запуск команд с subprocess
- Перехват вывода
- Окружение и модуль os
- shutil для операций с файлами