سازندهای برای کلاس GzipFile، که بیشتر متدهای یک شیء پرونده را شبیهسازی میکند، به استثنای متد truncate(). حداقل یکی از fileobj و filename باید یک مقدار غیربدیهی به آن داده شود.
نمونهی کلاس جدید بر پایهی fileobj است که میتواند یک پرونده معمولی، یک شیء io.BytesIO یا هر شیء دیگری باشد که یک پرونده را شبیهسازی میکند. مقدار پیشفرض آن None است، که در این صورت filename باز میشود تا یک شیء پرونده فراهم کند.
هنگامی که fileobj برابر None نباشد، آرگومان filename فقط برای گنجانده شدن در سرآیند پرونده gzip استفاده میشود، که ممکن است شامل نام پرونده اصلیِ پرونده فشردهنشده باشد. مقدار پیشفرض آن نام فایلِ fileobj است، اگر قابل تشخیص باشد؛ در غیر این صورت، پیشفرض آن رشتهی خالی است و در این حالت نام پرونده اصلی در سرآیند گنجانده نمیشود.
آرگومان mode میتواند هر یک از 'r'، 'rb'، 'a'، 'ab'، 'w'، 'wb'، 'x' یا 'xb' باشد، بسته به اینکه پرونده خوانده شود یا نوشته شود. مقدار پیشفرض، در صورت قابل تشخیص بودن، حالت fileobj است؛ در غیر این صورت، پیشفرض 'rb' است. در نسخههای آینده پایتون، حالت fileobj استفاده نخواهد شد. بهتر است همیشه mode را برای نوشتن مشخص کنید.
توجه داشته باشید که پرونده همیشه در حالت دودویی باز میشود. برای باز کردن یک پرونده فشرده در حالت متنی، از open() استفاده کنید (یا GzipFile خود را با یک io.TextIOWrapper بپیچید).
آرگومان compresslevel یک عدد صحیح از 0 تا 9 است که سطح فشردهسازی را کنترل میکند؛ 1 سریعترین است و کمترین فشردهسازی را تولید میکند، و 9 کندترین است و بیشترین فشردهسازی را تولید میکند. 0 بدون فشردهسازی است. پیشفرض 6 است.
آرگومان اختیاری mtime برچسب زمانی درخواستشده توسط gzip است. زمان در قالب یونیکس است، یعنی تعداد ثانیههای سپریشده از 00:00:00 UTC، ۱ ژانویهی ۱۹۷۰. برای تولید یک جریان فشردهشده که به زمان ایجاد وابسته نباشد، mtime را روی 0 تنظیم کنید. اگر mtime حذف شود یا None باشد، از زمان فعلی استفاده میشود؛ با این حال، اگر زمان فعلی خارج از بازهی 00:00:00 UTC، ۱ ژانویهی ۱۹۷۰ تا 06:28:15 UTC، ۷ فوریهی ۲۱۰۶ باشد، یا آرگومان mtime بهطور صریح خارج از بازهی 0 تا 2**32-1 داده شود، بهجای آن از مقدار 0 استفاده میشود.
در زیر ویژگی mtime را ببینید که هنگام از حالت فشرده خارج کردن تنظیم میشود.
فراخوانی متد close() یک شیء GzipFile، fileobj را نمیبندد، زیرا ممکن است بخواهید محتوای بیشتری را پس از دادههای فشرده اضافه کنید. این موضوع همچنین به شما امکان میدهد که یک شیء io.BytesIO را که برای نوشتن باز شده است بهعنوان fileobj ارسال کنید و با استفاده از متد getvalue() همان شیء io.BytesIO، بافر حافظهی حاصل را بازیابی کنید.
GzipFile از رابط io.BufferedIOBase پشتیبانی میکند، از جمله تکرار و دستور with. فقط متد truncate() پیادهسازی نشده است.
GzipFile همچنین متد و ویژگی زیر را فراهم میکند:
-
peek(n)¶
خواندن n بایت فشردهنشده بدون پیش بردن موقعیت پرونده. تعداد بایتهای برگرداندهشده ممکن است بیشتر یا کمتر از تعداد درخواستشده باشد.
نکته
اگرچه فراخوانی peek() موقعیت فایلِ GzipFile را تغییر نمیدهد، اما ممکن است موقعیت شیء پرونده زیرین را تغییر دهد (مثلاً اگر GzipFile با پارامتر fileobj ساخته شده باشد).
-
mode¶
'rb' برای خواندن و 'wb' برای نوشتن.
تغییر یافته در نسخهی 3.13: در نسخههای قبلی، یک عدد صحیح 1 یا 2 بود.
-
mtime¶
هنگام واگشایی، این ویژگی روی آخرین برچسب زمانی در آخرین سرآیندی خواندهشده تنظیم میشود. این یک عدد صحیح است و تعداد ثانیهها از مبدأ زمان یونیکس (۰۰:۰۰:۰۰ UTC، ۱ ژانویه ۱۹۷۰) را نگه میدارد. مقدار اولیه پیش از خواندن هر سرآیندای None است.
-
name¶
مسیر پرونده gzip روی دیسک، بهصورت str یا bytes. معادل خروجی os.fspath() برای مسیر ورودی اصلی، بدون هیچگونه نرمالسازی، حل یا بسط دیگری.
تغییر یافته در نسخهی 3.1: پشتیبانی از دستور with، بههمراه آرگومان سازندهی mtime و ویژگی mtime افزوده شد.
تغییر یافته در نسخهی 3.2: پشتیبانی از پروندههای پرشده با صفر (zero-padded) و غیرقابل مکانیابی (unseekable) اضافه شد.
تغییر یافته در نسخهی 3.4: پشتیبانی از حالتهای 'x' و 'xb' اضافه شد.
تغییر یافته در نسخهی 3.5: پشتیبانی از نوشتن هرگونه شیء شبهبایت افزوده شد. متد read() اکنون None را بهعنوان آرگومان میپذیرد.
منسوخ شده از نسخهی 3.9: باز کردن GzipFile برای نوشتن بدون تعیین آرگومان mode منسوخ شده است.
تغییر یافته در نسخهی 3.12: ویژگی filename را حذف کنید و بهجای آن از ویژگی name استفاده کنید.
تغییر یافته در نسخهی 3.15: سطح فشردهسازی پیشفرض به ۶ (کاهشیافته از ۹) کاهش یافت. این سطح پیشفرضی است که توسط بیشتر ابزارهای فشردهسازی استفاده میشود و توازن بهتری بین سرعت و کارایی برقرار میکند.