Сжатие и распаковка по алгоритму gzip 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Сжатие и распаковка по алгоритму gzip



Листинг 22.1. Сохранение в архивном файле GZIP произвольных данных

>>> import gzip

>>> fn = "test.gz"

>>> s = "Это очень, очень, очень, очень большая строка"

>>> f = gzip.open(fn, mode = "wt", encoding = "utf-8")

>>> f.write(s)

>>> f.close()

>>> f = gzip.open(fn, mode = "rt", encoding = "utf-8")

>>> print(f.read())

Это очень, очень, очень, очень большая строка

>>> f.close()

 

Листинг 22.2. Сжатие и распаковка двоичного файла по алгоритму GZIP

>>> import gzip

>>> fn = "image.gz"

>>> f1 = open("image.jpg", "rb")

>>> f2 = gzip.open(fn, "wb")

>>> f2.write(f1.read())

>>> f2.close()

>>> f1.close()

>>> f1 = open("image_new.jpg", "wb")

>>> f2 = gzip.GzipFile(filename = fn)

>>> f1.write(f2.read())

>>> f1.close()

>>> f2.close()

 

 

>>> import gzip

>>> s = b"This is a very, very, very, very big string"

>>> gzip.compress(s)

b'\x1f\x8b\x08\x00\x0f4>U\x02\xff\x0b\xc9\xc8,V\x00\xa2D\x85\xb2\xd4\xa2J\x1d\x0cR!)3]\xa1\xb8\xa4(3/\x1d\x00\xbaZ)I+\x00\x00\x00'

 

 

>>> b = b'\x1f\x8b\x08\x00\x0f4>U\x02\xff\x0b\xc9\xc8,V\x00\xa2D\x85\xb2\xd4\xa2J\x1d\x0cR!)3]\xa1\xb8\xa4(3/\x1d\x00\xbaZ)I+\x00\x00\x00'

>>> gzip.decompress(b)

b'This is a very, very, very, very big string'

Сжатие и распаковка по алгоритму BZIP2

Листинг 22.3. Сохранение в архивном файле BZIP2 произвольных данных

>>> import bz2

>>> fn = "test.bz2"

>>> s = "Это очень, очень, очень, очень большая строка"

>>> f = bz2.open(fn, mode = "wt", encoding = "utf-8")

>>> f.write(s)

>>> f.close()

>>> f = bz2.open(fn, mode = "rt", encoding = "utf-8")

>>> print(f.read())

Это очень, очень, очень, очень большая строка

>>> f.close()

 

Листинг 22.4. Сжатие и распаковка двоичного файла по алгоритму BZIP2

>>> import bz2

>>> fn = "doc.bz2"

>>> f1 = open("doc.doc", "rb")

>>> f2 = bz2.open(fn, "wb")

>>> f2.write(f1.read())

>>> f2.close()

>>> f1.close()

>>> f1 = open("doc_new.doc", "wb")

>>> f2 = bz2.BZ2File(filename = fn)

>>> f1.write(f2.read())

>>> f1.close()

>>> f2.close()

 

Листинг 22.5. Сжатие и распаковка двоичного файла по алгоритму BZIP2 по частям

import bz2

fn = "doc.bz2"

f1 = open("doc.doc", "rb")

f2 = open(fn, "wb")

comp = bz2.BZ2Compressor()

data = f1.read(1024)

while data:

f2.write(comp.compress(data))

data = f1.read(1024)

f2.write(comp.flush())

f2.close()

f1.close()

f1 = open("doc_new.doc", "wb")

f2 = open(fn, "rb")

decomp = bz2.BZ2Decompressor()

data = f2.read(1024)

while data:

f1.write(decomp.decompress(data))

data = f2.read(1024)

f1.close()

f2.close()

Сжатие и распаковка по алгоритму LZMA

Листинг 22.6. Сохранение строки в архиве LZMA

>>> import lzma

>>> fn = "test.xz"

>>> s = "Это очень, очень, очень, очень большая строка"

>>> f = lzma.open(fn, mode = "wt", encoding = "utf-8")

>>> f.write(s)

>>> f.close()

>>> f = lzma.LZMAFile(filename = fn)

>>> str(f.read(), encoding = "utf-8")

'Это очень, очень, очень, очень большая строка'

>>> f.close()

 

Листинг 22.7. Сжатие и распаковка двоичного файла по алгоритму LZMA по частям

import lzma

fn = "doc.lzma"

f1 = open("doc.doc", "rb")

f2 = open(fn, "wb")

comp = lzma.LZMACompressor(format = lzma.FORMAT_ALONE, preset = 9)

data = f1.read(1024)

while data:

f2.write(comp.compress(data))

data = f1.read(1024)

f2.write(comp.flush())

f2.close()

f1.close()

f1 = open("doc_new.doc", "wb")

f2 = open(fn, "rb")

decomp = lzma.LZMADecompressor()

data = f2.read(1024)

while data:

f1.write(decomp.decompress(data))

data = f2.read(1024)

f1.close()

f2.close()

 

 

import lzma

try:

f = lzma.open("test.xz")

except lzma.LZMAError:

print("Что-то пошло не так…")

Работа с архивами ZIP

>>> import zipfile

>>> f = zipfile.ZipFile("test.zip", mode = "a", compression = zipfile.ZIP_DEFLATED)

 

 

>>> # Добавляем в архив файл doc.doc

>>> f.write("doc.doc")

>>> # Добавляем в архив файл doc2.doc под именем newdoc.doc

>>> f.write("doc2.doc", arcname = "newdoc.doc")

 

 

>>> # Считываем содержимое файла text.txt

>>> f2 = open("text.txt", mode = "r")

>>> s = f2.read()

>>> # Добавляем прочитанные данные в архив под именем textual.txt

>>> f.writestr("textual.txt", s)

>>> f2.close()

 

 

>>> f.close()

 

 

>>> f = zipfile.ZipFile("test.zip", mode = "r", compression = zipfile.ZIP_DEFLATED)

>>> gf = f.getinfo("doc.doc")

>>> gf.filename, gf.file_size, gf.compress_size

('doc.doc', 242688, 63242)

>>> gf.date_time

(2015, 4, 27, 14, 51, 4)

 

 

>>> for i in f.infolist(): print(i.filename, end = " ")

doc.doc newdoc.doc textual.txt

 

 

>>> f.namelist()

['doc.doc', 'newdoc.doc', 'textual.txt']

 

 

>>> # Распаковываем файл doc.doc, сведения о котором хранятся

>>> # в переменной gf

>>> f.extract(gf)

'C:\\Python34\\doc.doc'

>>> # Распаковываем файл newdoc.doc в папку c:\work

>>> f.extract("newdoc.doc", path = r'c:\work')

'c:\\work\\newdoc.doc'

 

 

>>> # Распаковываем все файлы

>>> f.extractall()

>>> # Распаковываем лишь файлы doc.doc и newdoc.doc в папку c:\work

>>> f.extractall(path = r'c:\work', members = ['doc.doc', 'newdoc.doc'])

 

 

>>> d = f.open("textual.txt")

>>> f2 = open("newtext.txt", mode = "wb")

>>> f2.write(d.read())

>>> f2.close()

 

 

>>> d = f.read("textual.txt")

>>> f2 = open("newtext.txt", mode = "wb")

>>> f2.write(d)

>>> f2.close()

 

 

>>> zipfile.is_zipfile("test.zip")

True

>>> zipfile.is_zipfile("doc.doc")

False

Работа с архивами TAR

>>> import tarfile

>>> # Поскольку мы не можем создать сжатый файл TAR,

>>> # сначала создадим несжатый…

>>> f = tarfile.TarFile(name = "test.tar.gz", mode = "a")

>>> # …сразу же закроем его…

>>> f.close()

>>> # …а потом откроем снова, указав алгоритм сжатия GZIP

>>> f = tarfile.open(name = "test.tar.gz", mode = "w:gz")

 

 

>>> # Добавляем в архив файл doc.doc

>>> f.add("doc.doc")

>>> # Добавляем в архив файл doc2.doc под именем newdoc.doc

>>> f.add("doc2.doc", arcname = "newdoc.doc")

>>> # Добавляем в архив папку test с содержимым

>>> f.add("test")

>>> # Добавляем в архив папку test2 без содержимого

>>> f.add("test2", recursive = False)

>>> # Добавляем в архив папку test3, исключив все временные файлы,

>>> # что могут в ней находиться

>>> def except_tmp(filename):

return filename.find(".tmp")!= -1

>>> f.add("test3", exclude = except_tmp)

 

 

>>> f.close()

 

 

>>> f = tarfile.open(name = "test.tar.gz")

>>> # Получаем сведения о файле doc.doc

>>> ti = f.getmember("doc.doc")

>>> ti.name, ti.size, ti.mtime, ti.isfile(), ti.isdir()

('doc.doc', 242688, 1430135464, True, False)

>>> # Получаем сведения о папке test

>>> ti = f.getmember("test")

>>> ti.name, ti.size, ti.mtime, ti.isfile(), ti.isdir()

('test', 0, 1430223812, False, True)

 

 

>>> for i in f.getmembers(): print(i.name, end = " ")

doc.doc newdoc.doc test test/test2 test/test2/text.txt test/text.txt

 

 

>>> f.getnames()

['doc.doc', 'newdoc.doc', 'test', 'test/test2', 'test/test2/text.txt',

'test/text.txt']

 

 

>>> # Распаковываем папку test, сведения о которой хранятся

>>> # в переменной ti

>>> f.extract(ti)

>>> # Распаковываем файл doc.doc в папку c:\work

>>> f.extract("doc.doc", path = r'c:\work')

 

 

>>> # Распаковываем все файлы

>>> f.extractall()

>>> # Распаковываем лишь файлы doc.doc и newdoc.doc в папку c:\work

>>> l = [f.getmember("doc.doc"), f.getmember("newdoc.doc")]

>>> f.extractall(path = r'c:\work', members = l)

 

 

>>> d = f.extractfile("doc.doc")

>>> f2 = open("doc2.doc", mode = "wb")

>>> f2.write(d.read())

>>> f2.close()

 

 

>>> tarfile.is_tarfile("test.tar.gz")

True

>>> tarfile.is_tarfile("doc2.doc")

False



Поделиться:


Последнее изменение этой страницы: 2016-06-23; просмотров: 300; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 44.204.65.189 (0.041 с.)