shutil
— Высокоуровневые файловые операции¶
Исходный код: Lib/shutil.py
Модуль shutil
предлагает ряд высокоуровневых операций с файлами и коллекциями файлов. В частности, предусмотрены функции, которые поддерживают копирование и удаление файлов. Операции с отдельными файлами см. также в модуле os
.
Предупреждение
Даже функции копирования файлов более высокого уровня (shutil.copy()
, shutil.copy2()
) не могут скопировать все метаданные файла.
На платформах POSIX это означает, что владелец файла и группа будут потеряны, а также списки управления доступом. В Mac OS раздел ресурсов и другие метаданные не используются. Это означает, что ресурсы будут потеряны, а тип файла и коды создателя будут неверными. В Windows владельцы файлов, списки контроля доступа и альтернативные потоки данных не копируются.
Операции с каталогами и файлами¶
- shutil.copyfileobj(fsrc, fdst[, length])¶
Скопируйте содержимое file-like object fsrc в файлообразный объект fdst. Целое число length, если оно указано, является размером буфера. В частности, отрицательное значение длины означает копирование данных без зацикливания на исходных данных по частям; по умолчанию данные считываются по частям, чтобы избежать неконтролируемого потребления памяти. Обратите внимание, что если текущее положение файла объекта fsrc не равно 0, то будет скопировано только содержимое от текущего положения файла до конца файла.
- shutil.copyfile(src, dst, *, follow_symlinks=True)¶
Скопируйте содержимое (без метаданных) файла с именем src в файл с именем dst и верните значение dst наиболее эффективным из возможных способов. src и dst - это path-like objects или имена путей, заданные в виде строк.
dst должно быть полным именем целевого файла; посмотрите на
copy()
, чтобы найти копию, которая принимает путь к целевому каталогу. Если src и dst указывают один и тот же файл, возникаетSameFileError
.Местоположение назначения должно быть доступно для записи; в противном случае будет создано исключение
OSError
. Если dst уже существует, оно будет заменено. Специальные файлы, такие как символьные или блочные устройства и каналы, не могут быть скопированы с помощью этой функции.Если значение follow_symlinks равно false, а src является символьной ссылкой, то вместо копирования файла, на который указывает src, будет создана новая символьная ссылка.
Создает auditing event
shutil.copyfile
с аргументамиsrc
,dst
.Изменено в версии 3.3:
IOError
раньше вызывался вместоOSError
. Добавлен аргумент follow_symlinks. Теперь возвращает летнее время.Изменено в версии 3.4: Увеличьте значение
SameFileError
вместоError
. Поскольку первое является подклассом второго, это изменение обратно совместимо.Изменено в версии 3.8: Для более эффективного копирования файла могут использоваться системные вызовы быстрого копирования, зависящие от платформы. Смотрите раздел Эффективные операции копирования, зависящие от платформы.
- exception shutil.SameFileError¶
Это исключение возникает, если источником и пунктом назначения в
copyfile()
является один и тот же файл.Добавлено в версии 3.4.
- shutil.copymode(src, dst, *, follow_symlinks=True)¶
Скопируйте биты разрешений из src в dst. Содержимое файла, его владелец и группа остаются неизменными. src и dst имеют значение path-like objects или пути к ним задаются в виде строк. Если значение follow_symlinks равно false, а src и dst являются символьными ссылками,
copymode()
попытается изменить режим самого dst (а не файла, на который он указывает). Эта функциональность доступна не на каждой платформе; пожалуйста, смотритеcopystat()
для получения дополнительной информации. Еслиcopymode()
не может изменить символьные ссылки на локальной платформе, и его попросят это сделать, он ничего не сделает и вернется.Создает auditing event
shutil.copymode
с аргументамиsrc
,dst
.Изменено в версии 3.3: Добавлен аргумент follow_symlinks.
- shutil.copystat(src, dst, *, follow_symlinks=True)¶
Скопируйте биты разрешений, время последнего доступа, время последнего изменения и флаги из src в летнее время. В Linux
copystat()
также копирует «расширенные атрибуты», где это возможно. Содержимое файла, владелец и группа остаются неизменными. src и dst - это path-like objects или имена путей, заданные в виде строк.Если значение follow_symlinks равно false, а src и dst оба ссылаются на символьные ссылки,
copystat()
будет работать с самими символьными ссылками, а не с файлами, на которые ссылаются символьные ссылки — считывая информацию из символьной ссылки src и записывая информацию к символической ссылке dst.Примечание
Не все платформы предоставляют возможность проверять и изменять символьные ссылки. Сам Python может подсказать вам, какие функции доступны локально.
Если
os.chmod in os.supports_follow_symlinks
равноTrue
,copystat()
можно изменять биты разрешений символьной ссылки.Если
os.utime in os.supports_follow_symlinks
равноTrue
,copystat()
можно изменить время последнего доступа и модификации символьной ссылки.Если
os.chflags in os.supports_follow_symlinks
равноTrue
,copystat()
можно изменить флаги символьной ссылки. (os.chflags
доступно не на всех платформах.)
На платформах, где некоторые или все эти функции недоступны, при запросе изменить символьную ссылку
copystat()
копирует все, что может.copystat()
никогда не возвращает ошибку.Пожалуйста, смотрите
os.supports_follow_symlinks
для получения дополнительной информации.Создает auditing event
shutil.copystat
с аргументамиsrc
,dst
.Изменено в версии 3.3: Добавлен аргумент follow_symlinks и поддержка расширенных атрибутов Linux.
- shutil.copy(src, dst, *, follow_symlinks=True)¶
Копирует файл src в файл или каталог dst. src и dst должны быть path-like objects или строками. Если в dst указан каталог, файл будет скопирован в dst с использованием базового имени файла из src. Если в dst указан уже существующий файл, он будет заменен. Возвращает путь к вновь созданному файлу.
Если значение follow_symlinks равно false, а src является символьной ссылкой, то dst будет создано как символьная ссылка. Если значение follow_symlinks равно true, а src является символьной ссылкой, dst будет копией файла, на который ссылается src.
copy()
копирует данные файла и режим доступа к файлу (см.os.chmod()
). Другие метаданные, такие как время создания и изменения файла, не сохраняются. Чтобы сохранить все метаданные файла из оригинала, используйте вместо этогоcopy2()
.Создает auditing event
shutil.copyfile
с аргументамиsrc
,dst
.Создает auditing event
shutil.copymode
с аргументамиsrc
,dst
.Изменено в версии 3.3: Добавлен аргумент follow_symlinks. Теперь возвращает путь к только что созданному файлу.
Изменено в версии 3.8: Для более эффективного копирования файла могут использоваться системные вызовы быстрого копирования, зависящие от платформы. Смотрите раздел Эффективные операции копирования, зависящие от платформы.
- shutil.copy2(src, dst, *, follow_symlinks=True)¶
Идентичен
copy()
, за исключением того, чтоcopy2()
также пытается сохранить метаданные файла.Когда значение follow_symlinks равно false, а src является символьной ссылкой,
copy2()
пытается скопировать все метаданные из символьной ссылки src во вновь созданную символьную ссылку dst. Однако эта функциональность доступна не на всех платформах. На платформах, где некоторые или все эти функции недоступны,copy2()
сохранит все возможные метаданные;copy2()
никогда не вызывает исключения, поскольку не может сохранить метаданные файла.copy2()
используетcopystat()
для копирования метаданных файла. Пожалуйста, смотритеcopystat()
для получения дополнительной информации о поддержке платформой изменения метаданных символьных ссылок.Создает auditing event
shutil.copyfile
с аргументамиsrc
,dst
.Создает auditing event
shutil.copystat
с аргументамиsrc
,dst
.Изменено в версии 3.3: Добавлен аргумент follow_symlinks, попробуйте также скопировать расширенные атрибуты файловой системы (в настоящее время только для Linux). Теперь возвращает путь к только что созданному файлу.
Изменено в версии 3.8: Для более эффективного копирования файла могут использоваться системные вызовы быстрого копирования, зависящие от платформы. Смотрите раздел Эффективные операции копирования, зависящие от платформы.
- shutil.ignore_patterns(*patterns)¶
Эта фабричная функция создает функцию, которая может использоваться в качестве вызываемой для аргумента ignore
copytree()
, игнорируя файлы и каталоги, соответствующие одному из предоставленных шаблонов в стиле glob. Смотрите пример ниже.
- shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False, dirs_exist_ok=False)¶
Рекурсивно скопируйте все дерево каталогов с корнем в src в каталог с именем dst и верните целевой каталог. Все промежуточные каталоги, которые должны содержать dst, также будут созданы по умолчанию.
Разрешения и время доступа к каталогам копируются с помощью
copystat()
, отдельные файлы копируются с помощьюcopy2()
.Если значение symlinks равно true, символьные ссылки в исходном дереве отображаются как символьные ссылки в новом дереве, и метаданные исходных ссылок будут скопированы настолько, насколько позволяет платформа; если значение false или опущено, содержимое и метаданные связанных файлов копируются в новое дерево.
Когда значение symlinks равно false, если файл, на который указывает символическая ссылка, не существует, в конце процесса копирования в список ошибок, вызванных
Error
, будет добавлено исключение. Вы можете установить необязательный флаг ignore_dangling_symlinks в значение true, если хотите отключить это исключение. Обратите внимание, что этот параметр не действует на платформы, которые не поддерживаютos.symlink()
.Если задано значение ignore, то это должен быть вызываемый объект, который получит в качестве своих аргументов каталог, посещаемый
copytree()
, и список его содержимого, возвращаемыйos.listdir()
. Посколькуcopytree()
вызывается рекурсивно, вызываемая функция ignore будет вызываться один раз для каждого копируемого каталога. Вызываемый объект должен возвращать последовательность имен каталогов и файлов относительно текущего каталога (т.е. подмножество элементов во втором аргументе); эти имена затем будут проигнорированы в процессе копирования.ignore_patterns()
может использоваться для создания такого вызываемого объекта, который игнорирует имена, основанные на шаблонах в стиле glob.При возникновении исключений генерируется сообщение
Error
со списком причин.Если задана функция copy_function, то это должен быть вызываемый объект, который будет использоваться для копирования каждого файла. Он будет вызываться с указанием исходного пути и пути назначения в качестве аргументов. По умолчанию используется
copy2()
, но можно использовать любую функцию, поддерживающую ту же сигнатуру (например,copy()
).Если значение dirs_exist_ok равно false (по умолчанию), а значение dst уже существует, генерируется значение
FileExistsError
. Если значение dirs_exist_ok равно true, операция копирования будет продолжена, если она обнаружит существующие каталоги, и файлы в дереве dst будут перезаписаны соответствующими файлами из дерева src.Создает auditing event
shutil.copytree
с аргументамиsrc
,dst
.Изменено в версии 3.2: Добавлен аргумент copy_function, чтобы иметь возможность предоставлять пользовательскую функцию копирования. Добавлен аргумент ignore_dangling_symlinks, чтобы исключить ошибки зависания символических ссылок, когда значение symlinks равно false.
Изменено в версии 3.3: Копируйте метаданные, если значение symlinks равно false. Теперь возвращает значение dst.
Изменено в версии 3.8: Для более эффективного копирования файла могут использоваться системные вызовы быстрого копирования, зависящие от платформы. Смотрите раздел Эффективные операции копирования, зависящие от платформы.
Изменено в версии 3.8: Добавлен параметр dirs_exist_ok.
- shutil.rmtree(path, ignore_errors=False, onerror=None, *, dir_fd=None)¶
Удалите все дерево каталогов целиком; путь должен указывать на каталог (но не на символическую ссылку на каталог). Если значение ignore_errors равно true, ошибки, возникающие в результате неудачного удаления, будут проигнорированы; если значение false или опущено, такие ошибки обрабатываются путем вызова обработчика, указанного в onerror, или, если это значение опущено, они вызывают исключение.
Эта функция может поддерживать paths relative to directory descriptors.
Примечание
На платформах, поддерживающих необходимые функции на основе fd, по умолчанию используется версия
rmtree()
, устойчивая к атакам на символические ссылки. На других платформах реализацияrmtree()
подвержена атаке с использованием символических ссылок: при правильном выборе времени и обстоятельств злоумышленники могут манипулировать символическими ссылками в файловой системе, чтобы удалить файлы, к которым они не смогли бы получить доступ в противном случае. Приложения могут использовать атрибутrmtree.avoids_symlink_attacks
function, чтобы определить, какой регистр применим.Если указано значение onerror, оно должно быть вызываемым и принимать три параметра: function, path и excinfo.
Первый параметр, function, - это функция, которая вызвала исключение; это зависит от платформы и реализации. Второй параметр, path, будет именем пути, передаваемого в function. Третий параметр, excinfo, будет представлять собой информацию об исключении, возвращаемую
sys.exc_info()
. Исключения, вызванные onerror, не будут перехвачены.Создает auditing event
shutil.rmtree
с аргументамиpath
,dir_fd
.Изменено в версии 3.3: Добавлена версия, защищенная от атак по символическим ссылкам, которая используется автоматически, если платформа поддерживает функции на основе fd.
Изменено в версии 3.8: В Windows больше не будет удаляться содержимое соединения каталогов перед удалением этого соединения.
Изменено в версии 3.11: Параметр dir_fd.
- shutil.move(src, dst, copy_function=copy2)¶
Рекурсивно переместите файл или каталог (src) в другое место и верните адресат.
Если dst является существующим каталогом или символической ссылкой на каталог, то src перемещается внутрь этого каталога. Путь назначения в этом каталоге не должен уже существовать.
Если dst уже существует, но не является каталогом, он может быть перезаписан в зависимости от семантики
os.rename()
.Если адресат находится в текущей файловой системе, то используется
os.rename()
. В противном случае src копируется в адресат с помощью copy_function, а затем удаляется. В случае символических ссылок в качестве места назначения будет создана новая символическая ссылка, указывающая на адресат src, а src будет удален.Если задано значение copy_function, оно должно быть вызываемым, которое принимает два аргумента, src и адресат, и будет использоваться для копирования src в адресат, если
os.rename()
не может быть использовано. Если источником является каталог, вызываетсяcopytree()
, передавая ему функцию copy_function. Функцией copy_function по умолчанию являетсяcopy2()
. Использованиеcopy()
в качестве функции copy_function позволяет выполнить переход успешно, когда невозможно также скопировать метаданные, за счет того, что они не копируются.Создает auditing event
shutil.move
с аргументамиsrc
,dst
.Изменено в версии 3.3: Добавлена явная обработка символических ссылок для внешних файловых систем, что позволяет адаптировать ее к поведению Genus mv. Теперь возвращает dst.
Изменено в версии 3.5: Добавлен аргумент ключевого слова copy_function.
Изменено в версии 3.8: Для более эффективного копирования файла могут использоваться системные вызовы быстрого копирования, зависящие от платформы. Смотрите раздел Эффективные операции копирования, зависящие от платформы.
Изменено в версии 3.9: Принимает значение path-like object как для src, так и для летнего времени.
- shutil.disk_usage(path)¶
Возвращает статистику использования диска по заданному пути в виде named tuple с атрибутами total, used и free, которые представляют собой общий объем используемого и свободного пространства в байтах. path может быть файлом или каталогом.
Примечание
В файловых системах Unix path должен указывать на путь внутри смонтированного раздела файловой системы. На этих платформах CPython не пытается получить информацию об использовании диска из немонтированных файловых систем.
Добавлено в версии 3.3.
Изменено в версии 3.8: В Windows path теперь может быть файлом или каталогом.
Availability: Unix, Windows.
- shutil.chown(path, user=None, group=None)¶
Измените владельца пользователя и/или группу данного пути.
user может быть системным именем пользователя или uid; то же самое относится и к group. Требуется как минимум один аргумент.
Смотрите также
os.chown()
, базовую функцию.Создает auditing event
shutil.chown
с аргументамиpath
,user
,group
.Availability: Unix.
Добавлено в версии 3.3.
- shutil.which(cmd, mode=os.F_OK | os.X_OK, path=None)¶
Возвращает путь к исполняемому файлу, который был бы запущен, если бы была вызвана данная команда cmd. Если команда cmd не была бы вызвана, верните
None
.mode - это маска разрешений, передаваемая в
os.access()
, по умолчанию определяющая, существует ли файл и является ли он исполняемым.Если path не указан, используются результаты
os.environ()
, возвращающие либо значение «PATH», либо резервное значениеos.defpath
.В Windows перед текущим каталогом всегда указывается path, независимо от того, используете ли вы каталог по умолчанию или указываете свой собственный, что является поведением, используемым командной оболочкой при поиске исполняемых файлов. Кроме того, при поиске cmd в path проверяется переменная окружения
PATHEXT
. Например, если вы вызываетеshutil.which("python")
,which()
, будет выполнен поискPATHEXT
, чтобы знать, что он должен искатьpython.exe
в каталогах path. Например, в Windows:>>> shutil.which("python") 'C:\\Python33\\python.EXE'
Добавлено в версии 3.3.
- exception shutil.Error¶
Это исключение собирает исключения, которые возникают при работе с несколькими файлами. Для
copytree()
аргументом exception является список из 3 кортежей (srcname, dstname, exception).
Эффективные операции копирования, зависящие от платформы¶
Начиная с Python 3.8, все функции, связанные с копированием файла (copyfile()
, copy()
, copy2()
, copytree()
, и move()
) может использовать зависящий от платформы «быстрый-скопировать» системные вызовы для более эффективного копирования файла (см. bpo-33671). » быстрое копирование» означает, что операция копирования выполняется внутри ядра, что позволяет избежать использования буферов пользовательского пространства в Python, как в «outfd.write(infd.read())
».
В Mac OS fcopyfile используется для копирования содержимого файла (не метаданных).
В Linux используется os.sendfile()
.
В Windows shutil.copyfile()
используется больший размер буфера по умолчанию (1 МБ вместо 64 КБ) и используется вариант memoryview()
, основанный на shutil.copyfileobj()
.
Если операция быстрого копирования завершится неудачей и в целевой файл не было записано никаких данных, то shutil автоматически перейдет к использованию менее эффективной внутренней функции copyfileobj()
.
Изменено в версии 3.8.
пример дерева копирования¶
Пример, в котором используется вспомогательный элемент ignore_patterns()
:
from shutil import copytree, ignore_patterns
copytree(source, destination, ignore=ignore_patterns('*.pyc', 'tmp*'))
При этом будет скопировано все, кроме файлов .pyc
и файлов или каталогов, названия которых начинаются с tmp
.
Другой пример, в котором используется аргумент ignore для добавления вызова ведения журнала:
from shutil import copytree
import logging
def _logpath(path, names):
logging.info('Working in %s', path)
return [] # nothing will be ignored
copytree(source, destination, ignore=_logpath)
пример rmtree¶
В этом примере показано, как удалить дерево каталогов в Windows, где для некоторых файлов установлен бит, доступный только для чтения. Используется обратный вызов onerror, чтобы очистить бит, доступный только для чтения, и выполнить попытку удаления. Любая последующая ошибка будет повторяться.
import os, stat
import shutil
def remove_readonly(func, path, _):
"Clear the readonly bit and reattempt the removal"
os.chmod(path, stat.S_IWRITE)
func(path)
shutil.rmtree(directory, onerror=remove_readonly)
Операции архивирования¶
Добавлено в версии 3.2.
Изменено в версии 3.5: Добавлена поддержка формата xztar.
Также предоставляются высокоуровневые утилиты для создания и чтения сжатых и архивированных файлов. Они основаны на модулях zipfile
и tarfile
.
- shutil.make_archive(base_name, format[, root_dir[, base_dir[, verbose[, dry_run[, owner[, group[, logger]]]]]]])¶
Создайте архивный файл (например, zip или tar) и верните его название.
имя_основы - это имя создаваемого файла, включая путь к нему, без какого-либо расширения, зависящего от формата.
формат - формат архива: один из «zip» (если доступен модуль
zlib
), «tar», «gztar» (если доступен модульzlib
), «bztar» (если доступен модульbz2
доступен модуль), или «xztar» (если доступен модульlzma
).root_dir - это каталог, который будет корневым каталогом архива, все пути в архиве будут относительными к нему; например, обычно мы вводим root_dir в root_dir перед созданием архива.
base_dir - это каталог, из которого мы начинаем архивацию; т.е. base_dir будет общим префиксом для всех файлов и каталогов в архиве. base_dir должен быть указан относительно root_dir. Смотрите Пример архивации с помощью base_dir Как использовать base_dir и root_dir вместе.
В root_dir и base_dir по умолчанию используется текущий каталог.
Если значение dry_run равно true, архив не создается, но операции, которые будут выполнены, регистрируются в logger.
при создании tar-архива используются значения владелец и группа. По умолчанию используются текущие владелец и группа.
регистратор должен быть объектом, совместимым с PEP 282, обычно это экземпляр
logging.Logger
.Аргумент verbose не используется и устарел.
Создает auditing event
shutil.make_archive
с аргументамиbase_name
,format
,root_dir
,base_dir
.Примечание
Эта функция не является потокобезопасной, если используются пользовательские архиваторы, зарегистрированные с
register_archive_format()
. В этом случае она временно изменяет текущий рабочий каталог процесса для выполнения архивации.Изменено в версии 3.8: Современный формат pax (POSIX.1-2001) теперь используется вместо устаревшего формата GNU для архивов, созданных с помощью
format="tar"
.Изменено в версии 3.10.6: Эта функция теперь стала потокобезопасной при создании стандартных
.zip
и tar-архивов.
- shutil.get_archive_formats()¶
Возвращает список поддерживаемых форматов для архивации. Каждый элемент возвращаемой последовательности является кортежем
(name, description)
.По умолчанию
shutil
предоставляет следующие форматы:zip: ZIP-файл (если доступен модуль
zlib
).tar: Несжатый файл tar. Для новых архивов используется формат POSIX.1-2001 pax.
gztar: сжатый tar-файл (если доступен модуль
zlib
).bztar: tar-файл в формате bzip2 (если доступен модуль
bz2
).xztar: удаленный tar-файл (если доступен модуль
lzma
).
Вы можете зарегистрировать новые форматы или предоставить свой собственный архиватор для любых существующих форматов, используя
register_archive_format()
.
- shutil.register_archive_format(name, function[, extra_args[, description]])¶
Зарегистрируйте архиватор для формата name.
функция - это вызываемый объект, который будет использоваться для распаковки архивов. Вызываемый объект получит base_name файла для создания, за которым следует base_dir (который по умолчанию равен
os.curdir
), с которого нужно начать архивацию. Дополнительные аргументы передаются в качестве ключевых слов: owner, group, dry_run и logger (как указано вmake_archive()
).Если задано, extra_args - это последовательность пар
(name, value)
, которые будут использоваться в качестве дополнительных аргументов ключевых слов при использовании вызываемого архиватора.описание используется параметром
get_archive_formats()
, который возвращает список архивов. По умолчанию используется пустая строка.
- shutil.unregister_archive_format(name)¶
Удалите формат архива название из списка поддерживаемых форматов.
- shutil.unpack_archive(filename[, extract_dir[, format[, filter]]])¶
Распакуйте архив. имя файла - это полный путь к архиву.
extract_dir - это имя целевого каталога, в который распаковывается архив. Если этот параметр не указан, используется текущий рабочий каталог.
формат - это формат архива: один из «zip», «tar», «gztar», «bztar» или «xztar». Или любой другой формат, зарегистрированный в
register_unpack_format()
. Если это не указано,unpack_archive()
будет использовать расширение имени файла архива и проверит, был ли зарегистрирован распаковщик с этим расширением. В случае, если оно не найдено, выдается сообщениеValueError
.Аргумент filter, содержащий только ключевое слово, который был добавлен в Python 3.11.4, передается в базовую функцию распаковки. Для zip-файлов параметр filter не принимается. Для файлов tar рекомендуется установить значение
'data'
, если только не используются функции, специфичные для tar и UNIX-подобных файловых систем. (Подробнее см. Экстракционные фильтры). Фильтр'data'
станет стандартным для файлов tar в Python 3.14.Создает auditing event
shutil.unpack_archive
с аргументамиfilename
,extract_dir
,format
.Предупреждение
Никогда не извлекайте архивы из ненадежных источников без предварительной проверки. Возможно, что файлы созданы не по пути, указанному в аргументе extract_dir, например, элементы, у которых абсолютные имена файлов начинаются с «» или имена файлов с двумя точками «..».
Изменено в версии 3.7: Принимает значение path-like object для filename и extract_dir.
Изменено в версии 3.11.4: Добавлен аргумент filter.
- shutil.register_unpack_format(name, extensions, function[, extra_args[, description]])¶
Регистрирует формат распаковки. name - это название формата, а extensions - список расширений, соответствующих формату, например,
.zip
для Zip-файлов.функция - это вызываемый объект, который будет использоваться для распаковки архивов. Вызываемый объект получит:
путь к архиву в качестве позиционного аргумента;
каталог, в который должен быть извлечен архив, в качестве позиционного аргумента;
возможно, это аргумент ключевого слова filter, если для него было задано значение
unpack_archive()
;дополнительные аргументы ключевого слова, заданные с помощью extra_args в виде последовательности
(name, value)
кортежей.
описание может быть предоставлено для описания формата и будет возвращено функцией
get_unpack_formats()
.
- shutil.unregister_unpack_format(name)¶
Отмените регистрацию формата для распаковки. name - это название формата.
- shutil.get_unpack_formats()¶
Возвращает список всех зарегистрированных форматов для распаковки. Каждый элемент возвращаемой последовательности является кортежем
(name, extensions, description)
.По умолчанию
shutil
предоставляет следующие форматы:zip: ZIP-файл (распаковка сжатых файлов работает только при наличии соответствующего модуля).
tar: несжатый tar-файл.
gztar: сжатый tar-файл (если доступен модуль
zlib
).bztar: tar-файл в формате bzip2 (если доступен модуль
bz2
).xztar: удаленный tar-файл (если доступен модуль
lzma
).
Вы можете зарегистрировать новые форматы или предоставить свой собственный распаковщик для любых существующих форматов, используя
register_unpack_format()
.
Пример архивации¶
В этом примере мы создаем архив tar-файлов в формате gzip, содержащий все файлы, найденные в каталоге .ssh
пользователя:
>>> from shutil import make_archive
>>> import os
>>> archive_name = os.path.expanduser(os.path.join('~', 'myarchive'))
>>> root_dir = os.path.expanduser(os.path.join('~', '.ssh'))
>>> make_archive(archive_name, 'gztar', root_dir)
'/Users/tarek/myarchive.tar.gz'
Полученный архив содержит:
$ tar -tzvf /Users/tarek/myarchive.tar.gz
drwx------ tarek/staff 0 2010-02-01 16:23:40 ./
-rw-r--r-- tarek/staff 609 2008-06-09 13:26:54 ./authorized_keys
-rwxr-xr-x tarek/staff 65 2008-06-09 13:26:54 ./config
-rwx------ tarek/staff 668 2008-06-09 13:26:54 ./id_dsa
-rwxr-xr-x tarek/staff 609 2008-06-09 13:26:54 ./id_dsa.pub
-rw------- tarek/staff 1675 2008-06-09 13:26:54 ./id_rsa
-rw-r--r-- tarek/staff 397 2008-06-09 13:26:54 ./id_rsa.pub
-rw-r--r-- tarek/staff 37192 2010-02-06 18:23:10 ./known_hosts
Пример архивации с помощью base_dir¶
В этом примере, аналогичном one above, мы показываем, как использовать make_archive()
, но на этот раз с использованием base_dir. Теперь у нас есть следующая структура каталогов:
$ tree tmp
tmp
└── root
└── structure
├── content
└── please_add.txt
└── do_not_add.txt
В итоговом архиве please_add.txt
должно быть включено, а do_not_add.txt
- нет. Поэтому мы используем следующее:
>>> from shutil import make_archive
>>> import os
>>> archive_name = os.path.expanduser(os.path.join('~', 'myarchive'))
>>> make_archive(
... archive_name,
... 'tar',
... root_dir='tmp/root',
... base_dir='structure/content',
... )
'/Users/tarek/my_archive.tar'
Перечисление файлов в результирующем архиве дает нам:
$ python -m tarfile -l /Users/tarek/myarchive.tar
structure/content/
structure/content/please_add.txt
Запрос размера выходного терминала¶
- shutil.get_terminal_size(fallback=(columns, lines))¶
Получите размер окна терминала.
Для каждого из двух измерений проверяется переменная среды,
COLUMNS
иLINES
соответственно. Если переменная определена и ее значение является положительным целым числом, то она используется.Когда
COLUMNS
илиLINES
не определено, что является распространенным случаем, запрашивается терминал, подключенный кsys.__stdout__
, путем вызоваos.get_terminal_size()
.Если размер терминала не может быть успешно запрошен, либо потому, что система не поддерживает запросы, либо потому, что мы не подключены к терминалу, используется значение, указанное в параметре
fallback
.fallback
по умолчанию используется значение(80, 24)
, которое это размер по умолчанию, используемый многими эмуляторами терминалов.Возвращаемое значение представляет собой именованный кортеж типа
os.terminal_size
.Смотрите также: Единая спецификация UNIX, версия 2, Other Environment Variables.
Добавлено в версии 3.3.
Изменено в версии 3.11: Значения
fallback
также используются, еслиos.get_terminal_size()
возвращает нули.