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. Такие операции, как копирование содержимого файла, создание новой копии файла и т. Д. выглядел легко с этим модулем.