Python

модуль shutil в Python

модуль shutil в Python
Управление файлами и обработка файловых объектов считаются одной из самых сложных задач во всех языках программирования. Некоторые языки программирования предоставляют нам инструменты, которые абстрагируются от сложных частей обработки файлов с помощью простых в использовании функций и интерфейсов. Это именно то, что в Python шутил модуль тоже.

Python shutil

Модуль Python shutil позволяет разработчику очень легко использовать файловые объекты, не вдаваясь в подробности того, как все работает под прикрытием. Этот модуль в основном абстрагирует низкоуровневую семантику создания файловых объектов и управления ими, очищает их после завершения использования и позволяет нам сосредоточиться на бизнес-логике приложения. Мы увидим здесь много примеров, давайте начнем.

Примеры с модулем Python shutil

Мы изучим различные примеры, демонстрирующие использование Python шутил модуль здесь.

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

С копировать файл() функционировать в шутил модуль, мы можем сделать точную копию существующего файла в любом месте на машине. Давайте посмотрим на пример программы, чтобы продемонстрировать, как это можно сделать:

импорт ОС
импортный шутил
file_directory = './ Файлы '
print ('Файлы до:', os.listdir (каталог_файлов))
шутил.копировать файл('./ Files / привет.текст', './ Файлы / hello_again.текст')
print ('Файлы после:', os.listdir (каталог_файлов))

Мы просто скопировали файл, который существует в данном каталоге, чтобы клонировать файл в том же каталоге. Вот что мы получаем с помощью этой команды:

Копия файла Python shutil

Эта функция хороша тем, что упомянутая функция также принимает в качестве входных данных имя создаваемого нового файла.

Копирование файлов в другой каталог

Можно скопировать файл в новый каталог с помощью shutil's копия () функция. Давайте посмотрим на это в действии:

импорт ОС
импортный шутил
print ('Создание нового каталога.')
Операционные системы.mkdir ('LinuxHint')
print ('Файлы до:', os.listdir ('LinuxHint'))
шутил.копия ('./ Files / привет.txt ',' LinuxHint ')
print ('Файлы после:', os.listdir ('LinuxHint'))

Посмотрим, что выводит эта команда:

Копирование файла в новый каталог

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

Копирование файла с метаданными

В последнем разделе мы увидели, как сделать копию файла. Что делать, если вы хотите сделать точный клон файла, который включает в себя клонирование его метаданных, например, когда файл был создан, и т. Д. Это тоже возможно, но это может не работать в системе на основе POSIX. Давайте посмотрим на примере, как это можно сделать:

импорт ОС
импортный шутил
время импорта
new_directory = 'LinuxHint'
src_file = './ Files / привет.текст'
dest_file = './ LinuxHint / привет.текст'
def file_metadata (файл):
stat_info = ОС.stat (файл)
print ('Режим:', oct (stat_info.st_mode))
print ('Создано:', время.ctime (stat_info.st_ctime))
print ('Доступ:', время.ctime (stat_info.st_atime))
print ('Изменено:', время.ctime (stat_info.st_mtime))
Операционные системы.mkdir (новый_каталог)
print ('Метаданные для исходного файла:')
file_metadata (src_file)
шутил.copy2 (src_file, новый_директория)
print ('Метаданные для файла назначения:')
метаданные_файла (файл_назначения)

Вот что мы получаем с этой командой, когда запускаем ее в системе на основе POSIX (метаданные не клонируются полностью):

Копировать файл с метаданными

В системах, не основанных на POSIX, даже время создания и доступа будет точно соответствовать.

Клонирование всего каталога

В последнем разделе мы увидели, как сделать копию файла. Здесь мы увидим, как мы можем рекурсивно клонировать полный каталог. Это означает, что если в каталоге, который мы хотим клонировать, существует другой каталог, он также будет клонирован.

импортный отпечаток
импортный шутил
импорт ОС
src_directory = './ Файлы '
dest_directory = './ LinuxHint '
шутил.copytree (src_directory, dest_directory)
print ('Содержание источника:')
pprint.pprint (os.listdir (src_directory))
print ('Содержание назначения:')
pprint.pprint (os.listdir (каталог-назначения))

Посмотрим, что выводит эта команда:

Дублирование каталога

Обратите внимание, что каталог, который мы передаем функции copytree (), выполняет функцию целевой каталог не должен существовать до того, как мы запустим эту программу.

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

Удалить каталог очень просто с помощью rmtree () функция в модуле. Давайте посмотрим на эту функцию в действии здесь:

импортный отпечаток
импортный шутил
импорт ОС
delete_directory = 'LinuxHint'
current_directory = '.'
print ('Содержимое до удаления:')
pprint.pprint (os.listdir (текущий_директория))
шутил.rmtree (каталог_удаления)
print ('Содержимое после удаления:')
pprint.pprint (os.listdir (текущий_директория))

После запуска скрипта, LinuxHint каталог удаляется вместе с содержимым. Вот что мы получаем с помощью этой команды:

Удалить каталог

Поиск файлов

Если вы хотите найти файл, который присутствует в переменной PATH на вашем компьютере, мы можем использовать который() функция, чтобы найти этот файл по имени. Давайте посмотрим на демонстрационный пример этой функции:

импортный шутил
печать (шутил.который ('bsondump'))
печать (шутил.which ('файл-не найден'))

Вот что мы получаем с помощью этой команды:

Найти файл в PATH

Мониторинг пространства файловой системы

С модулем shutil у нас есть функция disk_usage (), с помощью которой мы также можем получить информацию о дисковом пространстве нашей машины. Давайте посмотрим на пример, который показывает эти данные в удобочитаемой форме:

импортный шутил
total_b, used_b, free_b = shutil.disk_usage ('.')
gb = 10 ** 9 # GB == гигабайт
print ('Итого: : 6.2f ГБ '.формат (total_b / gb))
print ('Используется: : 6.2f ГБ '.формат (used_b / gb))
print ('Бесплатно: : 6.2f ГБ '.формат (free_b / gb))

Вот что мы получаем с помощью этой команды:

Поиск места в файловой системе

Каталоги архивирования

В качестве последнего примера мы увидим, как можно заархивировать модуль каталога shutil make_archive () функция. Посмотрим на пример программы:

импортный шутил
импорт ОС
archive_directory = \
Операционные системы.дорожка.expanduser (ОС.дорожка.join ('путь-каталог-назначения', 'linuxhint'))
root_dir = os.дорожка.expanduser (ОС.дорожка.присоединиться ('~', '.ssh '))
шутил.make_archive (каталог_архива, 'gztar', корневой_каталог)

Вот что мы получаем с помощью этой команды:

Каталог архивации

Если вы разархивируете файл TAR и посмотрите, он будет содержать все .ssh каталог файлов в нем.

Заключение

В этом уроке мы рассмотрели, как легко управлять файловыми объектами с помощью высокоуровневых файловых операций с помощью шутил модуль в Python. Такие операции, как копирование содержимого файла, создание новой копии файла и т. Д. выглядел легко с этим модулем.

WinMouse позволяет настраивать и улучшать движение указателя мыши на ПК с Windows
Если вы хотите улучшить функции указателя мыши по умолчанию, используйте бесплатное ПО WinMouse. Он добавляет дополнительные функции, которые помогут ...
Левая кнопка мыши не работает в Windows 10
Если вы используете выделенную мышь со своим ноутбуком или настольным компьютером, но левая кнопка мыши не работает в Windows 10/8/7 по какой-то причи...
Курсор прыгает или перемещается случайным образом при наборе текста в Windows 10
Если вы обнаружите, что ваш курсор мыши прыгает или перемещается сам по себе, автоматически, случайным образом при вводе текста на ноутбуке или компью...