У овој лекцији ћемо проучавати како можемо да користимо Питхон гзип модул за читање и писање у компримоване датотеке у Питхону. Највећа карактеристика коју нам овај модул пружа је да компресоване датотеке можемо третирати као нормалне објекте датотека, што нас штеди од сложености управљања датотекама и њиховим животним циклусом у нашем коду и омогућава нам да се фокусирамо на основну пословну логику програма.Тхе гзип модул пружа нам готово исте функције као што су ГНУ програми гунзип и гзип.
Писање компримованих датотека са опен ()
Започећемо са основним примером где можемо створити гзип датотеку и уписати неке податке у њу. За то треба да направимо датотеку и отворимо је режимом писања како би подаци могли да се у њу убаце. Погледајмо пример програма помоћу којег можемо записати податке у гзип датотеку:
импорт гзипувоз ио
импорт ос
оутпут_филе = 'линкхинт_демо.ткт.гз '
врите_моде = 'вб'
са гзип-ом.отворите (оутпут_филе, врите_моде) као излаз:
са ио.ТектИОВраппер (оутпут, енцодинг = 'утф-8') као кодирање:
кодирати.врите ('У датотеку можемо уписати све што желимо.\ н ')
принт (оутпут_филе,
„садржи“, ос.стат (оутпут_филе).ст_сизе, 'бајтови')
ос.систем ('филе -б --миме ').формат (оутпут_филе))
Ево шта добијамо овом командом:
Писање у зип датотеку
Ако сада погледате структуру директоријума у којој сте извршили ову скрипту, требало би да постоји нова датотека са именом оног што смо навели у нашем програму изнад.
Записивање више редова у компримовану датотеку
Такође можемо да напишемо више линија или заправо било који број линија у нашу гзип датотеку на врло сличан начин као што смо то урадили у претходном примеру. Да бисмо овај пример учинили другачијим, користићемо и модул итертоолс. Погледајмо пример програма:
импорт гзипувоз ио
импорт ос
увоз итертоолс
оутпут_филе = 'линкхинт_демо.ткт.гз '
врите_моде = 'вб'
са гзип-ом.отворите (оутпут_филе, врите_моде) као излаз:
са ио.ТектИОВраппер (оутпут, енцодинг = 'утф-8') као енц:
енц.линије за писање (
итертоолс.репеат ('ЛинукХинт, понављајући исти ред!.\ н ', 10)
)
ос.систем ('гзцат линкхинт_демо.ткт.гз ')
Погледајмо излаз за ову наредбу:
Писање више редова
Читање компримованих података
Такође можемо читати компримовану датотеку коју смо креирали у последњем примеру користећи гзип модул уз врло једноставан позив на отворен функција:
импорт гзипувоз ио
импорт ос
филе_наме = 'линкхинт_демо.ткт.гз '
филе_моде = 'рб'
са гзип-ом.отвори (име_датотеке, мод_датотеке) као улазну_датотеку:
са ио.ТектИОВраппер (инпут_филе, енцодинг = 'утф-8') у дец:
штампа (дец.читати())
Ево шта добијамо овом командом:
Читање гзип датотеке
Реадинг Стреамс
Због чињенице да текстуалне датотеке могу бити врло велике, паметно је отворити их у току, а не учитавати комплетну датотеку у један објекат који заузима пуно системске меморије, а у неким случајевима може чак и изазвати процес да се потпуно сруши. Погледајмо пример програма који чита датој компресованој датотеци у току:
импорт гзипфром ио импорт БитесИО
увоз бинасции
моде_врите = 'вб'
моде_реад = 'рб'
нон_цомпрессед = б'Поновљена линија к пута.\ н '* 8
принт ('Некомпресовани подаци:', лен (нон_цомпрессед))
испис (некомпресовани)
буф = БитесИО ()
са гзип-ом.ГзипФиле (моде = моде_врите, филеобј = буф) као датотека:
датотека.писање (некомпресовано)
компресовано = буф.гетвалуе ()
принт ('Компримовани подаци:', лен (компримовани))
штампати (бинасции.хеклифи (компримован))
ин_буффер = БитесИО (компримовано)
са гзип-ом.ГзипФиле (моде = моде_реад, филеобј = ин_буффер) као датотека:
реад_дата = датотека.читање (лен (некомпримовано))
принт ('\ нПоново прочитајте:', лен (реад_дата))
принт (реад_дата)
Погледајмо излаз за ову наредбу:
Читање гзип датотеке у току
Иако је програм био мало дугачак, заправо смо само користили Питхон модуле да отворимо датотеку и преусмеримо садржај на конзолу са баферисаним објектом читача.
Закључак
У овој лекцији смо погледали како можемо да користимо Питхон гзип модул за компримовање и декомпресовање датотека у Питхону. Највећа карактеристика коју нам ова библиотека пружа је да компресоване датотеке можемо третирати као нормалне објекте датотека.
Прочитајте више постова заснованих на Питхону овде.