import gzip fg = gzip.open(filename, mode='rb', compresslevel=9, \ encoding=None, errors=None, \ newline=None)
filename
- имя сжатого файла,mode='rb'
- режим чтения/записи gzip
,compresslevel=9
- int
, уровень сжатия,encoding=None
- кодировка для текстового режима,errors=None
- ообработчик ошибок кодировки для текстового режима,newline=None
- окончания строк для текстового режима.Функция open()
модуля gzip
открывает filename
сжатый gzip
файл в двоичном или текстовом режиме для чтения или записи, возвращая объект файла.
Аргумент filename
может представлять собой фактическое имя файла - объект str
или bytes
или существующий объект файла для чтения или записи.
Аргументом mode
может быть:
'r'
, 'rb'
, 'a'
, 'ab'
, 'w'
, 'wb'
, 'x'
или 'xb'
;'rt'
, 'at'
, 'wt'
или 'xt'
. mode
равен 'rb'
.Аргументом compresslevel
является целое число от 0 до 9, как для конструктора класса gzip.GzipFile()
.
Для двоичного режима эта функция эквивалентна конструктору класса gzip.GzipFile()
: GzipFile(filename, mode, compresslevel)
. В этом случае аргументы encoding
, errors
and newline
не должны предоставляться.
Для текстового режима создается объект GzipFile
, который оборачивается в экземпляр io.TextIOWrapper
с указанным кодировки encoding
, обработчика ошибок errors
и окончанием(ями) строки newline
.
Создаем сжатый файл GZIP:
import gzip, os # подготовим данные text = 'Привет docs-python.ru ' data = [] for _ in range(50): data.append(text * 25) with gzip.open('file.txt.gz', 'wt') as fp: fp.write('\n\n'.join(data)) >>> os.system('file file.txt.gz') # file.txt.gz: gzip compressed data, was "file.txt", # last modified: Wed May 20 14:10:47 2020, # max compression
Прочитаем сжатый GZIP файл file.txt.gz
, выведем первые 22 символа и за одно распакуем:
import gzip with gzip.open('file.txt.gz', 'rb') as fr, \ open('file.txt', 'wb') as fw: bytes_data = fr.read() fw.write(bytes_data) # если открыть файл 'file.txt.gz' в текстовом # режиме 'rt', декодировать данные не нужно >>> data = bytes_data.decode('utf-8') >>> print(data[:22]) # Привет docs-python.ru Привет
Сжимаем существующий файл:
import gzip, shutil, os with open('file.txt', 'rb') as f_in: with gzip.open('sample-file.txt.gz', 'wb') as f_out: shutil.copyfileobj(f_in, f_out) >>> os.system('file sample-file.txt.gz') # sample-file.txt.gz: gzip compressed data, was "sample-file.txt", # last modified: Wed May 20 14:24:00 2020, max compression >>> os.path.getsize('file.txt') # 27598 >>> os.path.getsize('sample-file.txt.gz') # 195