Главная страница

справочник по Python. мм isbn 9785932861578 9 785932 861578


Скачать 4.21 Mb.
Названиемм isbn 9785932861578 9 785932 861578
Анкорсправочник по Python
Дата08.05.2022
Размер4.21 Mb.
Формат файлаpdf
Имя файлаBizli_Python-Podrobnyy-spravochnik.440222.pdf
ТипСправочник
#518195
страница31 из 82
1   ...   27   28   29   30   31   32   33   34   ...   82
Глава
18
.
Работа с файлами и каталогами
В этой главе описываются модули Python, предназначенные для работы с файлами и каталогами на высоком уровне. В число рассматриваемых вхо- дят модули для работы с основными форматами сжатия файлов, такими как gzip и bzip2, модули для извлечения файлов из архивов, таких как zip и tar, и модули для манипулирования самой файловой системой (напри- tar, и модули для манипулирования самой файловой системой (напри-
, и модули для манипулирования самой файловой системой (напри- мер, получение содержимого каталогов, перемещение, переименование, копирование и так далее). Низкоуровневые средства для работы с файла- ми рассматриваются в главе 19 «Службы операционной системы». Моду- ли, позволяющие реализовать синтаксический анализ содержимого таких файлов, как XML и HTML, главным образом рассматриваются в главе 24
«Обработка и кодирование данных в Интернете».
Модуль bz2
Модуль bz2 используется для чтения и записи данных, сжатых по алгорит- му bzip2.
BZ2File(filename [, mode [, buffering [, compresslevel]]])
Открывает сжатый файл .bz2 с именем filename и возвращает объект, похо- жий на объект файла. В аргументе mode передается значение ‘r’, когда файл открывается для чтения, и ‘w’, когда файл открывается для записи. Кроме того, доступна поддержка универсального символа перевода строки, для чего в аргументе mode следует указать значение ‘rU’. В аргументе buffering определяется размер буфера в байтах. По умолчанию используется значе- ние 0 (буферизация отключена). В аргументе compresslevel передается чис- передается чис- чис- чис- ло от 1 до 9. Значение 9 (по умолчанию) соответствует наивысшей степени сжатия, но при этом на обработку файла уходит больше времени. Возвра- щаемый объект поддерживает все операции, обычные для файлов, вклю- чая close(), read(), readline(), readlines(), seek(), tell(), write() и writelines().

396
Глава 18. Работа с файлами и каталогами
BZ2Compressor([compresslevel])
Создает объект, выполняющий сжатие последовательностей блоков дан- ных. Аргумент compresslevel определяет степень сжатия, которая выража- ется числом от 1 до 9 (по умолчанию).
Экземпляр c класса BZ2Compressor обладает следующими двумя методами:
c.compress(data)
Передает новую строку объекту сжатия c. Возвращает строку со сжатыми данными, если это возможно. Поскольку сжатие данных выполняется пор- циями, возвращаемая строка может включать не все исходные данные или включать сжатые данные, полученные в результате предыдущих вызовов метода compress(). Чтобы получить все оставшиеся данные, хранящиеся в объекте сжатия, после того, как ему будут переданы последние исходные данные, следует вызвать метод flush().
c.flush()
Выталкивает внутренние буферы и возвращает строку, содержащую сжа- тую версию всех оставшихся данных. После выполнения этой операции метод compress() объекта больше не должен вызываться.
BZ2Decompressor()
Создает объект, выполняющий распаковывание сжатых данных.
Экземпляр d класса BZ2Decompressor поддерживает всего один метод:
d.decompress(data)
Получив блок сжатых данных в виде строки data, этот метод возвращает распакованные данные. Поскольку обработка данных выполняется порци- ями, возвращаемая строка может включать не все распакованные данные.
Повторные вызовы этого метода будут продолжать распаковывать блоки данных, пока не встретится признак конца потока. После этого все по- следующие попытки распаковать данные будут приводить к исключению
EOFError
compress(data [, compresslevel])
Возвращает сжатую версию исходных данных в строке data. В аргументе
compresslevel
передается число в диапазоне от 1 до 9 (по умолчанию).
decompress(data)
Возвращает строку с распакованными данными, содержащимися в строке
data
Модуль filecmp
Модуль filecmp предоставляет функции, которые могут использоваться для сравнивания файлов и каталогов:
cmp(file1, file2 [, shallow])
Сравнивает файлы file1 и file2 и возвращает True, если они равны, в про- тивном случае возвращает False. По умолчанию равными считаются фай-

Модуль filecmp
397
лы, для которых функция os.stat() возвращает одинаковые значения атри- бутов. Если в аргументе shallow функции передается значение False, допол- нительно сравнивается содержимое файлов.
cmpfiles(dir1, dir2, common [, shallow])
Сравнивает файлы, перечисленные в списке common, в двух каталогах dir1 и dir2. Возвращает кортеж с тремя списками имен файлов (match, mismatch,
errors)
. В списке match перечислены одинаковые файлы, в списке mismatch – отличающиеся файлы и в списке errors – файлы, сравнивание которых не может быть выполнено по каким-либо причинам. Аргумент shallow имеет тот же смысл, что и в функции cmp().
dircmp(dir1, dir2 [, ignore [, hide]])
Создает объект сравнивания каталогов, который может использоваться для выполнения различных операций сравнивания каталогов dir1 и dir2.
В аргументе ignore передается список имен, которые следует исключить из операции сравнивания, и который по умолчанию содержит значения
[‘RCS’,’CVS’,’tags’]
. В аргументе hide передается список имен для сокры- тия; он по умолчанию содержит значения [os.curdir, os.pardir] ([‘.’, ‘..’] в UNIX).
Объект сравнивания каталогов d, возвращаемый функцией dircmp(), обла- дает следующими методами и атрибутами:
d.report()
Сравнивает каталоги dir1 и dir2 и выводит отчет в поток sys.stdout.
d.report_partial_closure()
Сравнивает каталоги dir1 и dir2, а также общие подкаталоги следующего уровня. Результаты выводятся в поток sys.stdout.
d.report_full_closure()
Сравнивает каталоги dir1 и dir2, а также все вложенные подкаталоги, ре- курсивно. Результаты выводятся в поток sys.stdout.
d.left_list
Список всех файлов и подкаталогов в каталоге dir1. Содержимое списка фильтруется в соответствии с содержимым списков hide и ignore.
d.right_list
Список всех файлов и подкаталогов в каталоге dir2. Содержимое списка фильтруется в соответствии с содержимым списков hide и ignore.
d.common
Список всех файлов и подкаталогов, найденных в обоих каталогах dir1 и dir2.
d.left_only
Список всех файлов и подкаталогов, найденных в каталоге dir1.
d.right_only
Список всех файлов и подкаталогов, найденных в каталоге dir2.

398
Глава 18. Работа с файлами и каталогами
d.common_dirs
Список подкаталогов, общих для каталогов dir1 и dir2.
d.common_files
Список файлов, общих для каталогов dir1 и dir2.
d.common_funny
Список файлов в каталогах dir1 и dir2 с одинаковыми именами, которые имеют разные типы или для которых невозможно получить информацию с помощью функции os.stat().
d.same_files
Список файлов с идентичным содержимым в каталогах dir1 и dir2.
d.diff_files
Список файлов с разным содержимым в каталогах dir1 и dir2.
d.funny_files
Список файлов, присутствующих в обоих каталогах dir1 и dir2, сравнива- ние которых не может быть выполнено по каким-либо причинам (напри- мер, из-за отсутствия прав доступа).
d.subdirs
Словарь, отображающий имена в d.common_dirs в дополнительные объекты dircmp
Примечание
Значения атрибутов объекта dircmp вычисляются в момент обращения к ним, а не в момент создания объекта. Благодаря этому, когда интерес представляет значе- ние лишь некоторых из атрибутов, наличие неиспользуемых атрибутов не оказы- вает отрицательного влияния на производительность.
Модуль fnmatch
Модуль fnmatch обеспечивает поддержку сопоставления имен файлов с при- менением шаблонных символов, как это делает командная оболочка в си- стеме UNIX. Этот модуль может использоваться только для сопоставления имен файлов с шаблоном, а получить фактический список файлов, соот- ветствующих шаблону, можно с помощью модуля glob. Шаблоны имеют следующий синтаксис:
Символ(ы)
Описание
*
Соответствует любому количеству любых символов
?
Соответствует одному любому символу
[
seq]
Соответствует любому символу из множества seq
[!
seq]
Соответствует любому символу, не входящему в множество seq

Модуль glob
399
Для сопоставления имен файлов с шаблонами могут использоваться сле- дующие функции:
fnmatch(filename, pattern)
Возвращает True или False, в зависимости от того, соответствует ли имя файла filename шаблону pattern. Чувствительность к регистру символов зависит от операционной системы (в некоторых системах, таких как Win-
Win- dows, регистр символов не учитывается).
fnmatchcase(filename, pattern)
Выполняет сопоставление имени файла filename с шаблоном pattern c уче- c уче- уче- том регистра символов.
filter(names, pattern)
Применяет функцию fnmatch() ко всем именам файлов, перечисленных в последовательности names, и возвращает список всех имен, соответствую- щих шаблону pattern.
Примеры
fnmatch(‘foo.gif’, ‘*.gif’) # Вернет True fnmatch(‘part37.html’, ‘part3[0-5].html’) # Вернет False
ёё
# Пример поиска файлов в дереве каталогов
# с помощью функции os.walk(), модуля fnmatch и генераторов def findall(topdir, pattern):
for path, files, dirs in os.walk(topdir):
for name in files:
if fnmatch.fnmatch(name,pattern):
yield os.path.join(path,name)
ёё
# Отыскать все файлы с расширением .py for pyfile in findall(“.”,”*.py”):
print pyfile
Модуль glob
Модуль glob позволяет получить список всех имен файлов в каталоге, со- ответствующих указанному шаблону, с применением правил командной оболочки UNIX (которые были представлены в описании модуля fnmatch).
glob(pattern)
Возвращает список путей к файлам, соответствующих шаблону pattern.
iglob(pattern)
Возвращает тот же результат, что и функция glob(), но в виде итератора.
Пример
htmlfile = glob(‘*.html’)
imgfiles = glob(‘image[0-5]*.gif’)

400
Глава 18. Работа с файлами и каталогами
Примечание
Знак тильды (˜) не имеет специального значения, как в командной оболочке; а также не выполняется подстановка значений переменных окружения. Если это необходимо, используйте функции os.path.expanduser() и os.path.expandvars() соответственно, перед вызовом функции glob().
Модуль gzip
М
одуль gzip объявляет класс GzipFile, который может использоваться для чтения и записи в файлы, совместимые с утилитой GNU gzip. Объекты класса GzipFile действуют как обычные объекты файлов, за исключением того, что при этом данные автоматически сжимаются и распаковываются.
GzipFile([filename [, mode [, compresslevel [, fileobj]]]])
Создает объект класса GzipFile и открывает файл. В аргументе filename пере- дается имя файла, а в аргументе mode – одно из значений: ‘r’, ‘rb’, ‘a’, ‘ab’,
‘w’
или ‘wb’. По умолчанию используется режим ‘rb’. В аргументе compress-
level
передается целое число от 1 до 9, которое управляет степенью сжатия.
Значение 1 обеспечивает самую низкую степень сжатия и самую высокую скорость работы; значение 9 (используется по умолчанию) – самую высокую степень сжатия и самую низкую скорость работы. В аргументе fileobj пере- дается существующий объект файла. Если этот аргумент указан при вызове функции, его значение будет использоваться вместо имени файла filename.
open(filename [, mode [, compresslevel]])
Аналогична вызову функции GzipFile(filename, mode, compresslevel). По умолчанию аргумент mode получает значение ‘rb’, а аргумент compresslevel – значение 9.
Примечания
• Вызов метода close() объекта класса GzipFile не закрывает файл, пере- данный в аргументе fileobj. Это позволяет записать в файл дополни- тельную информацию вслед за сжатыми данными.
• Файлы, созданные утилитой UNIX compress, не поддерживаются.
• Этот модуль использует модуль zlib.
Модуль shutil
Модуль shutil используется для выполнения таких операций высокого уровня над файлами, как копирование, удаление и переименование. Функ- ции из этого модуля должны применяться только к обычным файлам и ка- талогам. В частности, они не могут работать со специальными файлами, такими как именованные каналы, блочные устройства и так далее. Кроме того, имейте в виду, что эти функции не всегда корректно обрабатывают некоторые дополнительные типы метаданных (например, ответвления ре- сурсов, коды создателей и другие).

Модуль shutil
401
copy(src,dst)
Копирует файл src в файл или каталог dst, с сохранением прав доступа.
Значения аргументов src и dst должны быть строками.
copy2(src, dst)
Действует аналогично функции copy(), но дополнительно копирует время последнего обращения и время последнего изменения.
copyfile(src, dst)
Копирует содержимое файла src в файл dst. Значения аргументов src и dst должны быть строками.
copyfileobj(f1, f2 [, length])
Копирует все данные из открытого объекта файла f1 в открытый объект файла f2. Аргумент length определяет максимальный размер буфера. Отри- определяет максимальный размер буфера. Отри- максимальный размер буфера. Отри- максимальный размер буфера. Отри- размер буфера. Отри- размер буфера. Отри- буфера. Отри- буфера. Отри-
. Отри-
Отри- цательное значение в аргументе length означает, что копирование данных будет выполнено целиком, одной операцией (то есть все данные будут про- читаны как единый блок, а затем записаны).
copymode(src, dst)
Копирует биты разрешений из файла src в файл dst.
copystat(src, dst)
Копирует биты разрешений, время последнего обращения и время послед- него изменения из файла src в файл dst. Содержимое файла dst, владелец и группа остаются без изменений.
copytree(src, dst, symlinks [,ignore]])
Рекурсивно копирует дерево каталогов с корнем в каталоге src. Каталог на- значения dst не должен существовать (он будет создан). Копирование фай- фай- фай- лов выполняется с помощью функции copy2(). Если в аргументе symlinks передается истинное значение, символические ссылки в исходном дереве каталогов будут представлены символическими ссылками в новом дереве.
Если в аргументе symlinks передается ложное значение или он опущен, в но- вое дерево каталогов будет скопировано содержимое файлов, на которые указывают символические ссылки. В необязательном аргументе ignore пе- редается функция, которая будет использоваться для фильтрации файлов.
Эта функция должна принимать имя каталога и список его содержимого и возвращать список имен файлов, которые не должны копироваться. Если в процессе копирования будут происходить какие-либо ошибки, они будут собраны все вместе и в конце будет возбуждено исключение Error. В ка- честве аргумента исключению будет передан список кортежей (srcname,
dstname, exception)
, по одному для каждой возникшей ошибки.
ignore_patterns(pattern1, pattern2, ...)
Создает функцию, которая может использоваться для исключения из опе- рации имен, соответствующих шаблонам pattern1, pattern2 и так далее. Воз- вращаемая функция принимает два аргумента. В первом она принимает имя каталога, а во втором – список содержимого этого каталога. В качестве результата она возвращает список имен файлов, которые должны быть ис-

402
Глава 18. Работа с файлами и каталогами ключены из операции. Обычно эта функция используется, как значение аргумента ignore при вызове функции copytree(). Однако она также может использоваться в операциях с привлечением функции os.walk().
move(src, dst)
Перемещает файл или каталог src в dst. Если src – это каталог и он пере- мещается в другую файловую систему, выполняется рекурсивное копиро- вание его содержимого.
rmtree(path [, ignore_errors [, onerror]])
Удаляет дерево каталогов целиком. Если в аргументе ignore_errors переда- ется истинное значение, ошибки, возникающие при удалении, будут игно- рироваться. В противном случае для обработки ошибок будет вызываться функция, переданная в аргументе onerror. Эта функция должна принимать три аргумента (func, path и excinfo), где func – функция, которая вызвала ошибку (os.remove() или os.rmdir()), path – путь, который был передан функ- ции, и excinfo – информация об исключении, полученная вызовом функ- ции sys.exc_info(). Если аргумент onerror опущен, появление ошибок будет вызывать исключение.
Модуль tarfile
Модуль tarfile используется для работы с файлами архивов tar. С помо- щью функций из этого модуля можно читать и записывать как сжатые, так и несжатые файлы tar.
is_tarfile(name)
Возвращает True, если name соответствует допустимому файлу tar, который может быть прочитан с помощью этого модуля.
open([name [, mode [, fileobj [, bufsize]]]])
Создает новый объект класса TarFile. В аргументе name передается путь к файлу, а в аргументе mode – строка, определяющая режим открытия фай- ла tar. Строка режима в аргументе mode является комбинацией режима до- ступа к файлу и схемы сжатия и имеет вид ‘filemode[:compression]’. В число допустимых входят следующие комбинации:
Режим
Описание
‘r’
Файл открывается для чтения. Если файл сжат, он будет автома- открывается для чтения. Если файл сжат, он будет автома- открывается для чтения. Если файл сжат, он будет автома- для чтения. Если файл сжат, он будет автома- для чтения. Если файл сжат, он будет автома- чтения. Если файл сжат, он будет автома- чтения. Если файл сжат, он будет автома-
. Если файл сжат, он будет автома-
Если файл сжат, он будет автома- тически распакован. Этот режим используется по умолчанию.
‘r:’
Файл открывается для чтения без сжатия.
‘r:gz’
Файл открывается для чтения со сжатием gzip.
‘r:bz2’
Файл открывается для чтения со сжатием bzip2.
‘a’
, ‘a:’
Файл открывается для добавления в конец без сжатия.
‘w’
, ‘w:’
Файл открывается для записи без сжатия.
‘w:gz’
Файл открывается для записи со сжатием gzip.
‘w:bz2’
Файл открывается для записи со сжатием bzip2.

Модуль tarfile
403
Для создания объектов класса TarFile, допускающих только последова- тельный доступ (не допускается произвольное перемещение по файлу), ис- пользуются следующие режимы:
Режим
Описание
‘r|’
Открывает поток несжатых блоков для чтения
‘r|gz’
Открывает поток со сжатием gzip для чтения
‘r|bz2’
Открывает поток со сжатием bzip2 для чтения
‘w|’
Открывает поток несжатых блоков для записи
‘w|gz’
Открывает поток со сжатием gzip для записи
‘w|bz2’
Открывает поток со сжатием bzip2 для записи
Если указан аргумент fileobj, он должен быть открытым объектом файла.
В этом случае вместо аргумента name будет использоваться аргумент fileobj.
Аргумент bufsize определяет размер блока в файле tar. По умолчанию ис- tar. По умолчанию ис-
. По умолчанию ис- умолчанию ис- умолчанию ис- ис- ис- пользуется размер блока 20×512 байтов.
Экземпляр t класса TarFile, возвращаемый функцией open(), поддерживает следующие методы и атрибуты:
t.add(name [, arcname [, recursive]])
Добавляет новый файл в архив tar. В аргументе name передается имя фай- передается имя фай- имя фай- имя фай- фай- фай- ла любого типа (каталога, символической ссылки и так далее). Аргумент
arcname
определяет альтернативное имя файла внутри архива. В аргументе
recursive
передается логическое значение, определяющее, должно ли до- передается логическое значение, определяющее, должно ли до- логическое значение, определяющее, должно ли до- логическое значение, определяющее, должно ли до- значение, определяющее, должно ли до- значение, определяющее, должно ли до-
, определяющее, должно ли до- определяющее, должно ли до-
, должно ли до- должно ли до- ли до- ли до- до- до- бавляться содержимое каталогов рекурсивно. По умолчанию имеет зна- содержимое каталогов рекурсивно. По умолчанию имеет зна- содержимое каталогов рекурсивно. По умолчанию имеет зна- каталогов рекурсивно. По умолчанию имеет зна- каталогов рекурсивно. По умолчанию имеет зна- рекурсивно. По умолчанию имеет зна- рекурсивно. По умолчанию имеет зна-
. По умолчанию имеет зна-
По умолчанию имеет зна- умолчанию имеет зна- умолчанию имеет зна- имеет зна- имеет зна- зна- зна- чение True.
t.addfile(tarinfo [, fileobj])
Добавляет новый объект файла в архив tar. В аргументе tarinfo передается экземпляр структуры TarInfo с информацией об элементе архива. В аргу- с информацией об элементе архива. В аргу- информацией об элементе архива. В аргу- информацией об элементе архива. В аргу- об элементе архива. В аргу- об элементе архива. В аргу- элементе архива. В аргу- элементе архива. В аргу- архива. В аргу- архива. В аргу-
. В аргу-
В аргу- менте fileobj передается открытый объект файла, из которого будут чи- таться данные и сохраняться в архиве. Объем данных для чтения опреде- ляется из атрибута size аргумента tarinfo.
t.close()
Закрывает архив tar и записывает в конец архива два пустых блока, если он был открыт для записи.
t.debug
Определяет, какой объемом отладочной информации будет выводиться.
Если имеет значение 0, никакой информации выводиться не будет, а при значении 3 будут выводиться все отладочные сообщения. Вывод сообще- ний производится в поток sys.stderr.
t.dereference
Если этот атрибут установлен в значение True, символические и жесткие ссылки разыменовываются и в архив добавляется содержимое файлов, на

404
Глава 18. Работа с файлами и каталогами которые указывают эти ссылки. Если он установлен в значение False, до- бавляются только ссылки.
t.errorlevel
Определяет политику обработки ошибок, возникающих при извлечении элементов архива. Если этот атрибут установлен в значение 0, ошибки бу- дут игнорироваться. Если он установлен в значение 1, ошибки будут при- водить к возбуждению исключения OSError или IOError. Если он установлен в значение 2, нефатальные ошибки будут приводить к возбуждению ис- ключения TarError.
t.extract(member [, path])
Извлекает элемент member из архива и сохраняет его в текущем каталоге.
В аргументе member может передаваться либо имя элемента архива, либо экземпляр класса TarInfo. Аргумент path может использоваться, чтобы ука- зать иной каталог для сохранения.
t.extractfile(member)
Извлекает элемент member из архива и возвращает объект файла, доступ- ный только для чтения, который может использоваться для чтения содер- жимого с помощью методов read(), readline(), readlines(), seek() и tell().
В аргументе member может передаваться либо имя элемента архива, либо экземпляр класса TarInfo. Если элемент member представляет ссылку, вы- полняется попытка открыть файл, на который указывает ссылка.
t.getmember(name)
Отыскивает в архиве элемент с именем name и возвращает объект класса
TarInfo с информацией о нем. Если искомый элемент в архиве отсутствует, возбуждается исключение KeyError. Если в архиве имеется несколько эле-
Если в архиве имеется несколько эле- ментов с именем name, возвращается информация о последнем элементе (ко- торый, как предполагается, является наиболее свежим).
t.getmembers()
Возвращает список объектов класса TarInfo для всех элементов архива.
t.getnames()
Возвращает список имен всех элементов архива.
t.gettarinfo([name [, arcname [, fileobj]]])
Возвращает объект класса TarInfo, соответствующий файлу с именем name в файловой системе или открытому объекту файла fileobj. В аргументе arc-
name
передается альтернативное имя объекта в архиве. Основное назначе- передается альтернативное имя объекта в архиве. Основное назначе- альтернативное имя объекта в архиве. Основное назначе- альтернативное имя объекта в архиве. Основное назначе- имя объекта в архиве. Основное назначе- имя объекта в архиве. Основное назначе- объекта в архиве. Основное назначе- объекта в архиве. Основное назначе- в архиве. Основное назначе- в архиве. Основное назначе- архиве. Основное назначе- архиве. Основное назначе-
. Основное назначе-
Основное назначе- ние этой функции – создание объектов класса TarInfo для использования в вызовах таких методов, как add().
t.ignore_zeros
Если этот атрибут установлен в значение True, при чтении архива пустые блоки будут пропускаться. Если он установлен в значение False (по умолча- нию), пустой блок будет интерпретироваться, как признак конца архива.
Установка этого атрибута в значение True может пригодиться при чтении поврежденных архивов.

Модуль tarfile
405
t.list([verbose])
Выводит перечень содержимого архива в поток sys.stdout. Аргумент verbose определяет степень подробности выводимой информации. Если в этот ар- гумент передать значение False, будут выводиться только имена элементов архива. В противном случае будет выводиться подробный отчет (по умол- чанию).
t.next()
Используется при выполнении итераций по элементам архива. Возвраща- ет структуру TarInfo для следующего элемента архива или None.
t.posix
Если этот атрибут установлен в значение True, tar-файл создается в соот- tar-файл создается в соот-
-файл создается в соот- ветствии с требованиями стандарта POSIX 1003.1-1990. Этот стандарт на-
POSIX 1003.1-1990. Этот стандарт на-
1003.1-1990. Этот стандарт на- кладывает ограничения на длину имен файлов и на размеры самих файлов
(имена файлов не могут превышать 256 символов, а размер файлов не мо- жет превышать 8 Гбайт). Если этот атрибут установлен в значение False, ар- хив создается в соответствии с дополнениями GNU к стандартам, которые ослабляют эти ограничения. По умолчанию используется значение False.
Многие из предыдущих методов оперируют экземплярами класса TarInfo.
В следующей таблице перечислены методы и атрибуты экземпляра ti клас- са TarInfo.
Атрибут
Описание
ti.gid
Числовой идентификатор группы
ti.gname
Имя группы
ti.isblk()
Возвращает True, если объект является блочным устройством
ti.ischr()
Возвращает True, если объект является символьным устройством
ti.isdev()
Возвращает True, если объект является устройством (символь- ным, блочным или каналом FIFO)
ti.isdir()
Возвращает True, если объект является каталогом
ti.isfifo()
Возвращает True, если объект является каналом FIFO
ti.isfile()
Возвращает True, если объект является обычным файлом
ti.islnk()
Возвращает True, если объект является жесткой ссылкой
ti.isreg()
То же, что и метод isfile()
ti.issym()
Возвращает True, если объект является символической ссылкой
ti.islinkname
Имя файла, на который ссылается жесткая или символическая ссылка
ti.mode
Биты разрешений
ti.mtime
Время последнего изменения
ti.name
Имя элемента архива
ti.size
Размер в байтах

406
Глава 18. Работа с файлами и каталогами
Атрибут
Описание
ti.type
Т
ип файла, может быть одним из следующих: REGTYPE, AREGTYPE,
LNKTYPE
, SYMTYPE, DIRTYPE, FIFOTYPE, CONTTYPE, CHRTYPE, BLKTYPE или
GNUTYPE_SPARSE
ti.uid
Числовой идентификатор пользователя
ti.uname
Имя пользователя
Исключения
В модуле tarfile объявлены следующие исключения:
TarError
Базовый класс всех остальных исключений.
ReadError
Возбуждается в случае ошибки открытия tar-файла (например, при попыт- tar-файла (например, при попыт-
-файла (например, при попыт- ке открыть файл, не являющийся архивом tar).
CompressionError
Возбуждается, когда сжатые данные не могут быть распакованы.
StreamError
Возбуждается при попытке выполнить операцию, не поддерживаемую объектами класса TarFile (например, операцию, для выполнения которой требуется произвольный доступ к разным частям файла).
ExtractError
Возбуждается при появлении нефатальных ошибок в процессе извлечения
(только если атрибут errorlevel установлен в значение 2).
Пример
# Открыть архив tar и поместить в него несколько файлов t = tarfile.open(“foo.tar”,”w”)
t.add(“README”)
import glob for pyfile in glob.glob(“*.py”):
t.add(pyfile)
t.close()
ёё
# Открыть архив tar и выполнить обход всех его элементов t = tarfile.open(“foo.tar”)
for f in t:
print(“%s %d” % (f.name, f.size))
ёё
# Просмотреть содержимое архива tar
# и вывести содержимое файлов с именем “README”
t = tarfile.open(“foo.tar”)
for f in t:
(продолжение)

Модуль tempfile
407
if os.path.basename(f.name) == “README”:
data = t.extractfile(f).read()
print(“**** %s ****” % f.name)
Модуль tempfile
М
одуль tempfile используется для создания временных файлов.
mkdtemp([suffix [,prefix [, dir]]])
Создает временный каталог, доступный только владельцу вызывающего процесса, и возвращает абсолютный путь к этому каталогу. В аргументе
suffix
можно указать окончание, которое будет добавлено в конец сгене- рированного имени каталога, в аргументе prefix – префикс, который будет добавлен в начало имени каталога, и в аргументе dir – путь к каталогу, где должен быть создан временный каталог.
mkstemp([suffix [,prefix [, dir [,text]]]])
Создает временный файл и возвращает кортеж (fd, pathname), где fd – цело- численный дескриптор файла, возвращаемый функцией os.open(), а path-
name
– абсолютный путь к файлу. В аргументе suffix можно указать оконча- ние, которое будет добавлено в конец сгенерированного имени файла, в ар- гументе prefix – префикс, который будет добавлен в начало имени файла, в аргументе dir – путь к каталогу, где должен быть создан временный файл, и в аргументе text – логический флаг, определяющий, в каком режиме должен быть открыт файл – в текстовом или в двоичном (по умолчанию).
Гарантируется, что операция создания файла будет атомарной (и безопас- ной), если операционная система поддерживает флаг O_EXCL для функции os.open()
mktemp([suffix [, prefix [,dir]]])
Возвращает уникальное имя для временного файла. В аргументе suffix можно указать окончание, которое будет добавлено в конец сгенерирован- ного имени файла, в аргументе prefix – префикс, который будет добавлен в начало имени файла, в аргументе dir – путь к каталогу, где предполага- ется создать временный файл. Эта функция только генерирует уникаль- ное имя файла и не создает фактический временный файл. Так как при использовании этой функции между созданием имени файла и созданием самого файла проходит некоторое время, появляется опасность, что в тече- ние этого времени другой процесс создаст временный файл с тем же име- нем. Чтобы избежать этого, лучше использовать функцию mkstemp().
gettempdir()
Возвращает имя каталога по умолчанию, где будут создаваться временные файлы.
gettempprefix()
Возвращает префикс по умолчанию, который будет использоваться при создании временных файлов. Префикс не включает в себя имя каталога для временных файлов.

408
Глава 18. Работа с файлами и каталогами
TemporaryFile([mode [, bufsize [, suffix [,prefix [, dir]]]]])
Создает временный файл вызовом функции mkstemp() и возвращает объ- ект, похожий на объект файла, который поддерживает те же методы, что и обычный объект файла. В аргументе mode передается режим открытия файла; по умолчанию имеет значение ‘w+b’. Аргумент bufsize определяет поведение механизма буферизации и имеет тот же смысл, что и в функции open()
. Аргументы suffix, prefix и dir имеют тот же смысл, что и в функ- ции mkstemp(). Объект, возвращаемый этой функцией, является всего лишь оберткой вокруг обычного объекта файла, доступного в виде атрибута file.
Файл, созданный этой функцией, автоматически удаляется вместе с уни- чтожением объекта временного файла.
NamedTemporaryFile([mode [, bufsize [, suffix [, prefix [, dir [, delete ]]]]]])
Создает временный файл, как это делает функция TemporaryFile(), но гаран- тирует, что имя файла будет видимо в файловой системе. Имя файла мож- файла мож- файла мож- мож- мож- но получить из атрибута name возвращаемого объекта. Обратите внимание, что некоторые системы не позволяют повторно открыть временный файл с тем же именем, пока он не будет закрыт. Если в аргументе delete передать значение True (по умолчанию), временный файл будет удален сразу же по- сле того, как будет закрыт.
SpooledTemporaryFile([max_size
[, mode [, bufsize [, suffix [, prefix [, dir]]]]]])
Создает временный файл, как это делает функция TemporaryFile(), за ис- ключением того, что содержимое этого файла целиком будет храниться в памяти, пока его размер не превысит значение в аргументе max_size. Это достигается за счет того, что первоначально содержимое файла сохраня- ется в объекте StringIO, пока не возникнет необходимость перенести его в файловую систему. При попытке выполнить какую-либо низкоуровне- вую операцию ввода-вывода над файлом, с привлечением метода fileno(), содержимое файла, хранящееся в памяти, будет немедленно записано во временный файл, определенный объектом TemporaryFile. Кроме того, объ- ект файла, возвращаемый функцией SpooledTemporaryFile(), имеет метод rollover()
, позволяющий принудительно записать содержимое файла в файловую систему.
При конструировании имен временных файлов используются две глобаль- ные переменные. При необходимости им могут присваиваться новые зна- чения. Значения по умолчанию этих переменных зависят от операционной системы.
Переменная
Описание
tempdir
Каталог, в котором будут находиться имена файлов, возвра- щаемые функцией mktemp().
template
Префикс для имен файлов, возвращаемых функцией mktemp()
. Имя файла формируется из значения переменной template
, к которому добавляется строка десятичных цифр для придания уникальности.

Модуль zipfile
409
Примечание
По умолчанию при создании временных файлов модуль tempfile проверяет не- сколько стандартных местоположений. Например, в системе UNIX временные файлы создаются в одном из каталогов: /tmp, /var/tmp или /usr/tmp. В Windows временные файлы создаются в одном из каталогов: C:\TEMP, C:\TMP, \TEMP или \TMP.
Эти каталоги можно поменять, установив значение одной или более переменных окружения TMPDIR, TEMP и TMP. Если по каким-либо причинам временный файл не может быть создан ни в одном из обычных местоположений, он будет создан в те- кущем рабочем каталоге.
Модуль zipfile
М
одуль zipfile используется для работы с архивами в популярном форма- те zip (ранее известный, как PKZIP; в настоящее время поддерживается широким кругом программ). Zip-файлы широко используются при рабо-
Zip-файлы широко используются при рабо-
-файлы широко используются при рабо- те с языком Python, в основном для упаковки. Например, если zip-файлы с исходными текстами на языке Python добавить в переменную sys.path, то файлы, содержащиеся в архиве, можно будет загружать с помощью инструкции import (эта возможность реализована в библиотечном модуле zipimport
, однако вам едва ли придется использовать его непосредственно).
Пакеты, распространяемые в виде файлов с расширением .egg (создаются расширением setuptools), также являются обычными zip-файлами (файл с расширением .egg в действительности является обычным zip-архивом с некоторыми дополнительными метаданными внутри).
Ниже перечислены функции и классы, объявленные в модуле zipfile:
is_zipfile(filename)
Проверяет, действительно ли файл filename является zip-файлом. Возвра- zip-файлом. Возвра-
-файлом. Возвра- щает True, если файл filename является zip-файлом, и False – в противном случае.
ZipFile(filename [, mode [, compression [,allowZip64]]])
Открывает zip-файл filename и возвращает экземпляр класса ZipFile. Если в аргументе mode передать значение ‘r’, существующий файл будет открыт для чтения, ‘w’ – существующий файл будет уничтожен и вместо него будет создан новый файл, ‘a’ – существующий файл будет открыт в режиме до- бавления в конец. Для режима ‘a’, если filename соответствует существую- щему zip-файлу, новые файлы будут добавляться в него. Если файл filename не является zip-файлом, архив будет просто добавлен в конец этого файла.
Аргумент compression определяет метод сжатия, который должен использо- ваться при записи в архив, и может принимать одно из значений: ZIP_STORED или ZIP_DEFLATED. По умолчанию используется значение ZIP_STORED. Аргу-
Аргу- мент allowZip64 дает возможность разрешить использование расширений
ZIP64, которые позволяют создавать zip-файлы, размер которых превыша-
64, которые позволяют создавать zip-файлы, размер которых превыша- zip-файлы, размер которых превыша-
-файлы, размер которых превыша- ет 2 Гбайта. По умолчанию в этом аргументе передается False.

410
Глава 18. Работа с файлами и каталогами
PyZipFile(filename [, mode[, compression [,allowZip64]]])
Открывает zip-файл, как и функция ZipFile(), но возвращает экземпляр класса PyZipFile, обладающий дополнительным методом writepy(), который используется для добавления в архив файлов с исходными текстами на языке Python.
ZipInfo([filename [, date_time]])
Создает новый экземпляр класса ZipInfo с информацией об элементе архи- ва. Обычно нет необходимости вызывать эту функцию, за исключением случаев использования метода z.writestr() экземпляра класса ZipFile (опи- сывается ниже). В аргументах filename и date_time передаются значения для атрибутов filename и date_time, описываемых ниже.
Экземпляр z класса ZipFile или PyZipFile поддерживает следующие методы и атрибуты:
z.close()
Закрывает файл архива. Должен вызываться перед завершением програм- файл архива. Должен вызываться перед завершением програм- файл архива. Должен вызываться перед завершением програм- архива. Должен вызываться перед завершением програм- архива. Должен вызываться перед завершением програм-
. Должен вызываться перед завершением програм-
Должен вызываться перед завершением програм- мы, чтобы вытолкнуть в zip-файл оставшиеся в памяти записи.
z.debug
Степень подробности отладочных сообщений в диапазоне от 0 (сообщения не выводятся) до 3 (выводятся наиболее подробные сообщения).
z.extract(name [, path [, pwd ]])
Извлекает файл из архива и сохраняет его в текущем рабочем каталоге.
В аргументе name передается строка, полностью описывающая элемент ар- хива, или экземпляр класса ZipInfo. Аргумент path можно использовать, чтобы указать другой каталог, куда должен быть извлечен файл, а в аргу- менте pwd можно передать пароль, который будет использоваться при рабо- те с зашифрованными архивами.
z.extractall([path [members [, pwd]]])
Извлекает все элементы архива в текущий рабочий каталог. Аргумент path позволяет определить другой каталог для извлечения, а аргумент pwd – па- роль для работы с зашифрованными архивами. В аргументе members можно передать список извлекаемых элементов, который должен быть подмноже- ством списка, возвращаемого методом namelist() (описывается ниже).
z.getinfo(name)
Возвращает информацию об элементе архива name в виде экземпляра клас- са ZipInfo (описывается ниже).
z.infolist()
Возвращает список объектов класса ZipInfo для всех элементов архива.
z.namelist()
Возвращает список имен элементов архива.
z.open(name [, mode [, pwd]])
Открывает элемент архива с именем name и возвращает объект, похожий на файл, позволяющий читать содержимое элемента. В аргументе name мож- мож-

Модуль zipfile
411
но передать строку или экземпляр класса ZipInfo, описывающий один из элементов архива. В аргументе mode передается режим открытия файла, который должен быть одним из режимов, обеспечивающих доступ только для чтения, таких как ‘r’, ‘rU’ или ‘U’. В аргументе pwd передается пароль, который будет использоваться для работы с зашифрованными элемента- ми архива. Возвращаемый объект поддерживает методы read(), readline() и readlines(), а также обеспечивает возможность выполнения итераций с помощью инструкции for.
z.printdir()
Выводит каталог архива в поток sys.stdout.
z.read(name [,pwd])
Читает содержимое элемента name архива и возвращает данные в виде стро- ки. В аргументе name можно передать строку или экземпляр класса ZipInfo, описывающий один из элементов архива. В аргументе pwd передается па- роль, который будет использоваться для работы с зашифрованными эле- ментами архива.
z.setpassword(pwd)
Устанавливает пароль, который будет использоваться по умолчанию при извлечении зашифрованных файлов из архива.
z.testzip()
Читает все файлы, имеющиеся в архиве, и сверяет контрольные суммы.
Возвращает имя первого поврежденного файла или None, если в архиве нет поврежденных файлов.
z.write(filename[, arcname[, compress_type]])
Добавляет файл filename в архив под именем элемента архива arcname. Ар-
Ар- гумент compress_type определяет метод сжатия и может иметь значение
ZIP_STORED
или ZIP_DEFLATED. По умолчанию используется метод сжатия, указанный в вызове функции ZipFile() или PyZipFile(). Архив должен быть открыт в режиме ‘w’ или ‘a’.
z.writepy(pathname)
Этот метод доступен только в экземплярах класса PyZipFile и использует- ся для добавления в архив файлов с исходными текстами на языке Python
(файлы *.py). Может использоваться как простой способ упаковывания приложений на языке Python для последующего распространения. Если в аргументе pathname передается имя файла, это должно быть имя файла
.py
. В этом случае в архив будет добавлен один из файлов с расширением
.pyo
, .pyc или .py (в указанном порядке). Если в аргументе pathname переда- ется имя каталога, который не является каталогом пакета Python, в архив будут добавлены все файлы с расширениями .pyo, .pyc и .py, имеющиеся в этом каталоге. Если каталог является каталогом пакета, файлы будут добавляться под именем пакета, которое будет использоваться, как путь к файлам. Если какой-либо из подкаталогов также является каталогом па- кета, он будет добавлен рекурсивно.

412
Глава 18. Работа с файлами и каталогами
z.writestr(arcinfo, s)
Записывает строку s в zip-файл. В аргументе arcinfo может передаваться либо имя файла в архиве, куда будут записаны данные, либо экземпляр класса ZipInfo, содержащий имя файла, дату и время.
Экземпляр i класса ZipInfo, возвращаемый функцией ZipInfo() или метода- ми z.getinfo() и z.infolist(), обладает следующими атрибутами:
Атрибут
Описание
i.filename
Имя элемента архива.
i.date_time
Кортеж (year,month,day,hours,minutes,seconds), содержащий время последнего изменения. Элементы month и day могут принимать числовые значения в диапазоне 1–12 и 1–31 соот- ветственно. Все остальные значения начинаются с 0.
i.compress_type
Метод сжатия элемента архива. В настоящее время модуль поддерживает только методы ZIP_STORED и ZIP_DEFLATED.
i.comment
Комментарий для элемента архива.
i.extra
Поле данных, содержащее дополнительные атрибуты файла.
Какие данные будут храниться в этом поле, зависит от систе- мы, где был создан файл.
i.create_system
Целочисленный код, описывающий систему, где был создан архив. Типичными значениями являются: 0 (MS-DOS FAT), 3
(UNIX), 7 (Macintosh) и 10 (Windows NTFS).
i.create_version
Код версии утилиты PKZIP, с помощью которой был создан архив.
i.extract_version
Минимальная версия утилиты, которая может использо- ваться для распаковывания архива.
i.reserved
Зарезервированное поле. В настоящее время устанавливает- ся в значение 0.
i.flag_bits
Флаги zip-архива, описывающие представление данных, включая метод шифрования и сжатия.
i.volume
Номер тома в заголовке файла.
i.internal_attr
Описывает внутреннюю структуру содержимого архива.
Если самый младший бит имеет значение 1, данные являют- ся текстом ASCII. В противном случае содержимое интерпре- тируется как двоичные данные.
i.external_attr
Внешние атрибуты файла, количество и назначение которых зависит от операционной системы.
i.header_offset
Смещение в байтах от заголовка файла.
i.file_offset
Смещение в байтах от начала данных в файле.
i.CRC
Контрольная сумма CRC для распакованного файла.
i.compress_size
Размер сжатого файла.
i.file_size
Размер несжатого файла.

Модуль zlib
413
Примечание
Подробное описание внутренней структуры zip-файлов можно найти в примеча- zip-файлов можно найти в примеча-
-файлов можно найти в примеча- ниях к приложению PKZIP, по адресу http://www.pkware.com/appnote.html.
Модуль zlib
М
одуль zlib поддерживает возможность сжатия данных, предоставляя до- ступ к библиотеке zlib.
adler32(string [, value])
Вычисляет контрольную сумму Adler-32 строки string. Аргумент value ис- пользуется как начальное значение (например, при вычислении контроль- ной суммы группы из нескольких строк). В противном случае использует- ся фиксированное значение по умолчанию.
compress(string [, level])
Сжимает данные в строке string. В аргументе level может передаваться целое число от 1 до 9, определяющее степень сжатия, где 1 соответствует наименьшей степени сжатия (и самой быстрой), а 9 – наивысшей (и са- мой медленной) степени сжатия. По умолчанию используется значение 6.
Возвращает сжатую строку или возбуждает исключение, если возникла какая-либо ошибка.
compressobj([level])
Возвращает объект сжатия. Аргумент level имеет тот же смысл, что и в функции compress().
crc32(string [, value])
Вычисляет контрольную сумму CRC строки string. Значение аргумента
value
, если он указан, используется, как начальное значение контрольной суммы. В противном случае используется фиксированное значение.
decompress(string [, wbits [, buffsize]])
Распаковывает данные в строке string. Аргумент wbits определяет размер буфера окна, а buffsize – начальный размер выходного буфера. Если воз- никает какая-либо ошибка, возбуждает исключение.
decompressobj([wbits])
Возвращает объект, реализующий распаковывание потока данных. Аргу- мент wbits определяет размер буфера окна.
Объект сжатия c обладает следующими методами:
c.compress(string)
Сжимает строку string. Возвращает строку со сжатыми данными, при этом может возвращаться только часть сжатых данных из строки string.
Эти данные должны объединяться в общий поток вывода с результатами преды дущих вызовов метода c.compress(). Некоторые входные данные мо- гут сохраняться во внутренних буферах для последующей обработки.

414
Глава 18. Работа с файлами и каталогами
c.flush([mode])
Сжимает оставшиеся входные данные и возвращает их в сжатом виде.
В аргументе mode может передаваться значение Z_SYNC_FLUSH, Z_FULL_FLUSH или Z_FINISH (по умолчанию). Значения Z_SYNC_FLUSH и Z_FULL_FLUSH обеспе- чивают возможность дальнейшего сжатия и дают возможность частичного восстановления в случае появления ошибок при распаковывании. Значе- ние Z_FINISH завершает поток сжатых данных.
Объект d, реализующий распаковывание потока данных, обладает следую- щими методами и атрибутами:
d.decompress(string [,max_length])
Распаковывает строку string и возвращает строку с распакованными дан- и возвращает строку с распакованными дан- возвращает строку с распакованными дан- возвращает строку с распакованными дан- строку с распакованными дан- строку с распакованными дан- с распакованными дан- с распакованными дан- распакованными дан- распакованными дан- дан- дан- ными, при этом может возвращаться только часть распакованных данных из строки string. Эти данные должны объединяться в общий поток выво-
Эти данные должны объединяться в общий поток выво- да с результатами предыдущих вызовов метода c.decompress(). Некоторые входные данные могут сохраняться во внутренних буферах для последую- щей обработки. Аргумент max_length определяет максимальный объем бло- определяет максимальный объем бло- максимальный объем бло- максимальный объем бло- объем бло- объем бло- бло- бло- ка возвращаемых данных. В случае его превышения еще не обработанные данные помещаются в атрибут d.unconsumed_tail.
d.flush()
Распаковывает все оставшиеся входные данные и возвращает их в виде строки. После вызова этого метода объект, реализующий распаковывание потока данных, не может использоваться повторно.
d.unconsumed_tail
Строка, содержащая данные, которые не были обработаны последним вызовом decompress(). В этом атрибуте сохраняются данные, когда распа- ковывание производится поэтапно, из-за ограничений на размер буфера.
Содержимое этого атрибута будет учитываться при последующих вызовах decompress()
d.unused_data
Строка с дополнительными байтами в конце сжатых данных.
Примечание
Библиотеку zlib можно получить по адресу http://www.zlib.net.

1   ...   27   28   29   30   31   32   33   34   ...   82


написать администратору сайта