GeezerVison is showing python.github.io — compression.zstd --- فشردهسازی سازگار با قالب Zstandard
compression.zstd --- فشردهسازی سازگار با قالب Zstandard¶
اضافه شده در نسخهی 3.14.
کد منبع: Lib/compression/zstd/__init__.py
این ماژول کلاسها و توابعی را برای فشردهسازی و از حالت فشرده خارج کردن دادهها با استفاده از الگوریتم فشردهسازی Zstandard (یا zstd) ارائه میدهد. راهنمای zstd، Zstandard را اینگونه توصیف میکند: «الگوریتم فشردهسازی سریع و بدون اتلاف که سناریوهای فشردهسازی بلادرنگ را با نسبتهای فشردهسازی در سطح zlib و بهتر هدف قرار میدهد.» همچنین یک رابط پرونده نیز گنجانده شده است که از خواندن و نوشتن محتوای پروندههای .zst ایجادشده توسط ابزار zstd و نیز جریانهای فشرده خام zstd پشتیبانی میکند.
ماژول compression.zstd شامل موارد زیر است:
این یک ماژول اختیاری است. اگر در نسخهی CPython شما وجود ندارد، به مستندات توزیعکنندهی خود مراجعه کنید (یعنی هر کسی که پایتون را در اختیار شما قرار داده است). اگر شما توزیعکننده هستید، نیازمندیهای ماژولهای اختیاری را ببینید.
استثناها¶
-
exception compression.zstd.ZstdError¶
این استثنا زمانی پرتاب میشود که خطایی در حین فشردهسازی یا رفع فشردگی، یا هنگام مقداردهی اولیهی وضعیت فشردهساز/بازکننده رخ دهد.
خواندن و نوشتن پروندههای فشرده¶
-
compression.zstd.open(file, /, mode='rb', *, level=None, options=None, zstd_dict=None, encoding=None, errors=None, newline=None)¶
یک پرونده فشردهشده با Zstandard را در حالت دودویی یا متنی باز میکند و یک شیء پرونده بازمیگرداند.
آرگومان file میتواند یک نام پرونده (دادهشده بهصورت یک شیء str، bytes یا path-like) باشد، که در این صورت پرونده نامبرده باز میشود، یا میتواند یک شیء پرونده موجود برای خواندن از آن یا نوشتن در آن باشد.
آرگومان حالت میتواند 'rb' برای خواندن (پیشفرض)، 'wb' برای بازنویسی، 'ab' برای الحاق، یا 'xb' برای ایجاد انحصاری باشد. این موارد را میتوان بهترتیب و بهطور معادل بهصورت 'r'، 'w'، 'a' و 'x' نیز مشخص کرد. همچنین میتوانید برای باز کردن در حالت متنی، بهترتیب از 'rt'، 'wt'، 'at' و 'xt' استفاده کنید.
هنگام خواندن، آرگومان options میتواند یک دیکشنری باشد که پارامترهای پیشرفتهی واگشایی را فراهم میکند؛ برای اطلاعات دقیق دربارهی پارامترهای پشتیبانیشده، DecompressionParameter را ببینید. آرگومان zstd_dict یک نمونه از ZstdDict است که در حین واگشایی استفاده میشود. هنگام خواندن، اگر آرگومان level برابر None نباشد، یک TypeError پرتاب خواهد شد.
هنگام نوشتن، آرگومان options میتواند دیکشنری باشد که پارامترهای فشردهسازی پیشرفته را ارائه میکند؛ برای اطلاعات دقیق درباره پارامترهای پشتیبانیشده، CompressionParameter را ببینید. آرگومان level سطح فشردهسازی برای استفاده هنگام نوشتن دادههای فشرده است. فقط یکی از level یا options میتواند غیر None باشد. آرگومان zstd_dict یک نمونه ZstdDict است که در طول فشردهسازی استفاده میشود.
در حالت دودویی، این تابع معادل سازندهی ZstdFile است: ZstdFile(file, mode, ...). در این حالت، نباید پارامترهای encoding، errors و newline ارائه شوند.
در حالت متنی، یک شیء ZstdFile ایجاد میشود و یک نمونه io.TextIOWrapper با کدگذاری، رفتار مدیریت خطا و پایانهای خط مشخصشده، آن را در بر میگیرد.
-
class compression.zstd.ZstdFile(file, /, mode='rb', *, level=None, options=None, zstd_dict=None)¶
باز کردن یک پرونده فشردهشده با Zstandard در حالت دودویی.
یک ZstdFile میتواند یک file object از پیش باز را دربرگیرد، یا بهطور مستقیم روی یک پرونده نامدار عمل کند. آرگومان file یا شیء پرونده برای دربرگرفتن، یا نام پرونده برای باز کردن را مشخص میکند (بهصورت یک str، bytes یا شیء path-like). در صورت دربرگرفتن یک شیء پرونده موجود، پرونده دربرگرفتهشده هنگام بستن ZstdFile بسته نمیشود.
آرگومان mode میتواند یکی از 'rb' برای خواندن (پیشفرض)، 'wb' برای بازنویسی، 'xb' برای ایجاد انحصاری، یا 'ab' برای الحاق باشد. این موارد میتوانند بهطور معادل بهترتیب بهصورت 'r'، 'w'، 'x' و 'a' نیز داده شوند.
اگر file یک شیء پرونده باشد (نه یک نام پرونده واقعی)، حالت 'w' پرونده را کوتاه نمیکند، بلکه معادل 'a' است.
هنگام خواندن، آرگومان options میتواند یک دیکشنری باشد که پارامترهای پیشرفتهی واگشایی را فراهم میکند؛ برای اطلاعات دقیق دربارهی پارامترهای پشتیبانیشده، DecompressionParameter را ببینید. آرگومان zstd_dict یک نمونه از ZstdDict است که در حین واگشایی استفاده میشود. هنگام خواندن، اگر آرگومان level برابر None نباشد، یک TypeError پرتاب خواهد شد.
هنگام نوشتن، آرگومان options میتواند یک دیکشنری باشد که پارامترهای پیشرفته فشردهسازی را ارائه میدهد؛ برای اطلاعات دقیق درباره پارامترهای پشتیبانیشده، CompressionParameter را ببینید. آرگومان level سطح فشردهسازی مورد استفاده هنگام نوشتن دادههای فشرده است. فقط یکی از level یا options را میتوان ارسال کرد. آرگومان zstd_dict یک نمونه از ZstdDict است که در حین فشردهسازی استفاده میشود.
ZstdFile از همهی اعضای مشخصشده توسط io.BufferedIOBase پشتیبانی میکند، بهجز detach() و truncate(). از تکرار و دستور with پشتیبانی میشود.
متد و ویژگیهای زیر نیز ارائه شدهاند:
-
peek(size=-1)¶
دادهی بافرشده را بدون پیشبردن موقعیت پرونده برمیگرداند. حداقل ۱ بایت داده برگردانده خواهد شد، مگر اینکه به EOF رسیده باشیم. تعداد دقیق بایتهای برگرداندهشده نامشخص است (آرگومان size نادیده گرفته میشود).
نکته
اگرچه فراخوانی peek() موقعیت پرونده در ZstdFile را تغییر نمیدهد، اما ممکن است موقعیت شیء پرونده زیربنایی را تغییر دهد (برای مثال، اگر ZstdFile با ارسال یک شیء پرونده برای file ساخته شده باشد).
-
mode¶
'rb' برای خواندن و 'wb' برای نوشتن.
-
name¶
نام پرونده Zstandard. معادل ویژگی name در file object زیرین است.
فشردهسازی و از حالت فشرده خارج کردن دادهها در حافظه¶
-
compression.zstd.compress(data, level=None, options=None, zstd_dict=None)¶
data (یک bytes-like object) را فشرده میکند و داده فشردهشده را بهصورت یک شیء bytes برمیگرداند.
آرگومان level یک عدد صحیح است که سطح فشردهسازی را کنترل میکند. level جایگزینی برای تنظیم CompressionParameter.compression_level در options است. برای دریافت مقادیری که میتوان برای level ارسال کرد، از bounds() روی compression_level استفاده کنید. اگر به گزینههای پیشرفتهی فشردهسازی نیاز باشد، آرگومان level باید حذف شود و در دیکشنری options پارامتر CompressionParameter.compression_level باید تنظیم شود.
آرگومان options یک دیکشنری پایتون است که حاوی پارامترهای پیشرفته فشردهسازی است. کلیدها و مقدارهای معتبر برای پارامترهای فشردهسازی، بهعنوان بخشی از مستندات CompressionParameter مستند شدهاند.
آرگومان zstd_dict یک نمونه از ZstdDict است که حاوی دادههای آموزشدیده برای بهبود کارایی فشردهسازی است. میتوان از تابع train_dict() برای تولید یک دیکشنری Zstandard استفاده کرد.
-
compression.zstd.decompress(data, zstd_dict=None, options=None)¶
data (یک bytes-like object) را از حالت فشرده خارج میکند و دادهی فشردهنشده را بهصورت یک شیء bytes برمیگرداند.
آرگومان options یک دیکشنری پایتون شامل پارامترهای پیشرفتهی ازفشردهسازی است. کلیدها و مقدارهای معتبر برای پارامترهای فشردهسازی بهعنوان بخشی از مستندات DecompressionParameter مستند شدهاند.
آرگومان zstd_dict نمونهای از ZstdDict است که حاوی دادههای آموزشدیدهی مورد استفاده در حین فشردهسازی است. این باید همان دیکشنری Zstandard مورد استفاده در حین فشردهسازی باشد.
اگر data حاصل الحاق چندین فریم فشردهی متمایز باشد، همهی این فریمها را از حالت فشرده خارج کنید و حاصل الحاق نتایج را برگردانید.
-
class compression.zstd.ZstdCompressor(level=None, options=None, zstd_dict=None)¶
یک شیء فشردهساز ایجاد کنید که میتوان از آن برای فشردهسازی تدریجی دادهها استفاده کرد.
برای فشردهسازی یک تکهی داده بهشکلی آسانتر، تابع سطح ماژول compress() را ببینید.
آرگومان level یک عدد صحیح است که سطح فشردهسازی را کنترل میکند. level جایگزینی برای تنظیم CompressionParameter.compression_level در options است. برای دریافت مقادیری که میتوان برای level ارسال کرد، از bounds() روی compression_level استفاده کنید. اگر به گزینههای پیشرفتهی فشردهسازی نیاز باشد، آرگومان level باید حذف شود و در دیکشنری options پارامتر CompressionParameter.compression_level باید تنظیم شود.
آرگومان options یک دیکشنری پایتون است که حاوی پارامترهای پیشرفته فشردهسازی است. کلیدها و مقدارهای معتبر برای پارامترهای فشردهسازی، بهعنوان بخشی از مستندات CompressionParameter مستند شدهاند.
آرگومان zstd_dict یک نمونه اختیاری از ZstdDict است که حاوی دادههای آموزشدیده برای بهبود بهرهوری فشردهسازی است. برای تولید یک دیکشنری Zstandard میتوانید از تابع train_dict() استفاده کنید.
-
compress(data, mode=ZstdCompressor.CONTINUE)¶
data (یک bytes-like object) را فشرده میکند و در صورت امکان، یک شیء bytes حاوی دادههای فشرده، یا در غیر این صورت یک شیء خالی bytes را برمیگرداند. ممکن است بخشی از data بهصورت داخلی در بافر نگهداری شود، تا در فراخوانیهای بعدی compress() و flush() مورد استفاده قرار گیرد. دادههای برگرداندهشده باید با خروجی تمام فراخوانیهای پیشین compress() الحاق شوند.
آرگومان mode یک ویژگی از ZstdCompressor است که میتواند یکی از CONTINUE، FLUSH_BLOCK یا FLUSH_FRAME باشد.
هنگامی که همهی دادهها به فشردهساز ارائه شد، برای پایان دادن به فرآیند فشردهسازی، متد flush() را فراخوانی کنید. اگر compress() در حالی فراخوانی شود که mode روی FLUSH_FRAME تنظیم شده باشد، نباید flush() فراخوانی شود، زیرا یک فریمخالی جدید مینویسد.
-
flush(mode=ZstdCompressor.FLUSH_FRAME)¶
فرآیند فشردهسازی را به پایان میرساند و یک شیء bytes را برمیگرداند که حاوی هرگونه دادهای است که در بافرهای داخلی فشردهساز ذخیرهشده است.
آرگومان mode یک ویژگی از ZstdCompressor است و میتواند FLUSH_BLOCK یا FLUSH_FRAME باشد.
-
set_pledged_input_size(size)¶
اندازهی دادهی فشردهنشده size را که برای فریم بعدی ارائه خواهد شد، مشخص کنید. size در سرآیند فریم بعدی نوشته خواهد شد، مگر اینکه CompressionParameter.content_size_flag برابر False یا 0 باشد. اندازهی 0 به این معناست که فریم خالی است. اگر size برابر None باشد، سرآیند فریم شامل اندازهی فریم نخواهد بود. فریمهایی که شامل اندازهی دادهی فشردهنشده هستند، برای خارج کردن از حالت فشرده به حافظهی کمتری نیاز دارند، بهویژه در سطوح فشردهسازی بالاتر.
اگر last_mode برابر با FLUSH_FRAME نباشد، استثنای ValueError پرتاب میشود، زیرا فشردهساز در ابتدای یک فریم نیست. اگر اندازه متعهدشده با اندازه واقعی داده ارائهشده به compress() مطابقت نداشته باشد، فراخوانیهای بعدی compress() یا flush() ممکن است استثنای ZstdError را پرتاب کنند و ممکن است آخرین تکه داده از دست برود.
پس از فراخوانی flush() یا compress() با حالت FLUSH_FRAME، فریم بعدی شامل اندازه فریم در سرآیند نخواهد بود، مگر اینکه set_pledged_input_size() دوباره فراخوانی شود.
-
CONTINUE¶
دادههای بیشتری برای فشردهسازی جمعآوری میکند، که ممکن است خروجی را بلافاصله تولید کند یا نکند. این حالت با بیشینهسازی مقدار داده به ازای هر بلوک و فریم، نسبت فشردهسازی را بهینه میکند.
-
FLUSH_BLOCK¶
یک بلوک را کامل کنید و آن را در جریان داده بنویسید. دادههای برگرداندهشده تاکنون را میتوان بلافاصله از حالت فشرده خارج کرد. هنوز میتوان به دادههای پیشین در بلوکهای آیندهای که با فراخوانیهای compress() تولید میشوند، ارجاع داد و فشردهسازی را بهبود بخشید.
-
FLUSH_FRAME¶
یک فریم را کامل کرده و بنویسید. دادههای بعدی ارائهشده به compress()، در یک فریم جدید نوشته خواهند شد و نمیتوانند به دادههای گذشته ارجاع دهند.
-
last_mode¶
آخرین حالت ارسالشده به compress() یا flush(). این مقدار میتواند یکی از CONTINUE، FLUSH_BLOCK یا FLUSH_FRAME باشد. مقدار اولیه FLUSH_FRAME است که نشان میدهد فشردهساز در آغاز یک فریم جدید قرار دارد.
-
class compression.zstd.ZstdDecompressor(zstd_dict=None, options=None)¶
یک شیء واگشا (decompressor) ایجاد کنید، که میتوان از آن برای واگشایی دادهها بهصورت تدریجی استفاده کرد.
برای روشی راحتتر جهت واگشایی از کل یک جریان فشرده بهصورت یکجا، تابع سطح ماژول decompress() را ببینید.
آرگومان options یک دیکشنری پایتون شامل پارامترهای پیشرفتهی ازفشردهسازی است. کلیدها و مقدارهای معتبر برای پارامترهای فشردهسازی بهعنوان بخشی از مستندات DecompressionParameter مستند شدهاند.
آرگومان zstd_dict نمونهای از ZstdDict است که حاوی دادههای آموزشدیدهی مورد استفاده در حین فشردهسازی است. این باید همان دیکشنری Zstandard مورد استفاده در حین فشردهسازی باشد.
نکته
این کلاس، برخلاف تابع decompress() و کلاس ZstdFile، ورودیهای حاوی چند فریم فشرده را بهصورت شفاف مدیریت نمیکند. برای خارج کردن یک ورودی حاوی چند فریم از حالت فشرده، باید از decompress()، یا اگر با یک file object کار میکنید از ZstdFile، یا از چند نمونه ZstdDecompressor استفاده کنید.
-
decompress(data, max_length=-1)¶
data (یک شیء شبهبایت) را واگشایی میکند و دادهی فشردهنشده را بهصورت بایت برمیگرداند. ممکن است بخشی از data بهصورت داخلی در حافظهی موقت ذخیره شود تا در فراخوانیهای بعدی decompress() استفاده شود. دادهی برگرداندهشده باید با خروجی هر یک از فراخوانیهای قبلی decompress() الحاق شود.
اگر max_length غیرمنفی باشد، متد حد اکثر max_length بایت از دادههای رمزگشاییشده را برمیگرداند. اگر این محدودیت به دست آمد و خروجیهای بیشتری میتوانند تولید شوند (یا EOF به دست آمد)، ویژگی needs_input روی False تنظیم خواهد شد. در این حالت، فراخوانی بعدی به decompress() ممکن است data را به عنوان b'' فراهم کند تا خروجی بیشتری به دست آید. محتوای کامل را میتوان بدین صورت خواند:
process_output(d.decompress(data, max_length))
while not d.eof and not d.needs_input:
process_output(d.decompress(b"", max_length))
اگر تمام دادههای ورودی واگشایی و برگردانده شده باشند (خواه به این دلیل که کمتر از max_length بایت بودند، خواه به این دلیل که max_length منفی بود)، ویژگی needs_input روی True تنظیم خواهد شد.
تلاش برای رمزگشایی دادهها پس از پایان یک قاب، یک EOFError ایجاد میکند. هر دادهای که پس از پایان قاب یافت شود نادیده گرفته شده و در ویژگی unused_data ذخیره میشود.
-
eof¶
True اگر به نشانگر پایان جریان رسیده باشد.
-
unused_data¶
دادهای پس از پایان جریان فشرده یافت شد.
پیش از رسیدن به پایان جریان، این b'' خواهد بود.
-
needs_input¶
False اگر متد decompress() بتواند پیش از آنکه به ورودی فشردهی جدید نیاز داشته باشد، دادهی واگشاییشدهی بیشتری را ارائه دهد.
دیکشنریهای Zstandard¶
-
compression.zstd.train_dict(samples, dict_size)¶
یک دیکشنری Zstandard را آموزش میدهد و یک نمونه ZstdDict را برمیگرداند. دیکشنریهای Zstandard امکان فشردهسازی کارآمدتر دادههایی با اندازههای کوچکتر را فراهم میکنند، که بهطور سنتی به دلیل تکرار کمتر، فشردهسازی آنها دشوار است. اگر در حال فشردهسازی چندین گروه مشابه از دادهها هستید (مانند پروندههای مشابه)، دیکشنریهای Zstandard میتوانند نسبتهای فشردهسازی و سرعت را بهطور قابلتوجهی بهبود بخشند.
آرگومان samples (یک تکرارپذیر از اشیای bytes)، مجموعهای از نمونههای استفادهشده برای آموزش دیکشنری Zstandard است.
آرگومان dict_size، یک عدد صحیح، حداکثر اندازهای (بر حسب بایت) است که دیکشنری Zstandard باید داشته باشد. مستندات Zstandard پیشنهاد میدهد که حداکثر مطلق بیشتر از ۱۰۰ KB نباشد، اما این حداکثر اغلب میتواند بسته به دادهها کوچکتر باشد. دیکشنریهای بزرگتر معمولاً فشردهسازی را کند میکنند، اما نسبتهای فشردهسازی را بهبود میبخشند. دیکشنریهای کوچکتر به فشردهسازی سریعتر منجر میشوند، اما نسبت فشردهسازی را کاهش میدهند.
-
compression.zstd.finalize_dict(zstd_dict, /, samples, dict_size, level)¶
یک تابع پیشرفته برای تبدیل یک دیکشنری Zstandard با «محتوای خام» به یک دیکشنری Zstandard معمولی. دیکشنریهای «محتوای خام» دنبالهای از بایتها هستند که نیازی نیست از ساختار یک دیکشنری Zstandard عادی پیروی کنند.
آرگومان zstd_dict یک نمونه از ZstdDict است که dict_content آن حاوی محتویات خام دیکشنری است.
آرگومان samples (یک پیمایشپذیر از اشیای bytes)، شامل دادههای نمونه برای تولید دیکشنری Zstandard است.
آرگومان dict_size، یک عدد صحیح، حداکثر اندازهای (بر حسب بایت) است که دیکشنری Zstandard باید داشته باشد. برای پیشنهادها درباره حداکثر اندازه دیکشنری، به train_dict() مراجعه کنید.
آرگومان level (یک عدد صحیح) سطح فشردهسازی است که انتظار میرود به فشردهسازهایی که از این دیکشنری استفاده میکنند، ارسال شود. اطلاعات دیکشنری برای هر سطح فشردهسازی متفاوت است، بنابراین تنظیم برای سطح فشردهسازی مناسب میتواند فشردهسازی را کارآمدتر کند.
-
class compression.zstd.ZstdDict(dict_content, /, *, is_raw=False)¶
پوششی برای دیکشنریهای Zstandard. میتوان از دیکشنریها برای بهبود فشردهسازی بسیاری از تکههای کوچک داده استفاده کرد. اگر نیاز دارید یک دیکشنری جدید را از دادههای نمونه آموزش دهید، از train_dict() استفاده کنید.
آرگومان dict_content (یک شیء شبهبایت)، اطلاعات دیکشنری از پیش آموزشدیدهشده است.
آرگومان is_raw، یک بولی، پارامتر پیشرفتهای است که معنای dict_content را کنترل میکند. True یعنی dict_content یک دیکشنری «محتوای خام» است، بدون هیچ محدودیت قالبی. False یعنی dict_content یک دیکشنری معمولی Zstandard است که از توابع Zstandard ایجاد شده است، برای مثال، train_dict() یا CLI خارجی zstd.
هنگام ارسال یک ZstdDict به یک تابع، میتوانید با ارسال ویژگیهای as_digested_dict و as_undigested_dict بهعنوان آرگومان zstd_dict، نحوه بارگذاری دیکشنری را کنترل کنید؛ برای مثال، compress(data, zstd_dict=zd.as_digested_dict). پردازش یک دیکشنری (digesting) عملیات پرهزینهای است که هنگام بارگذاری یک دیکشنری Zstandard رخ میدهد. هنگام انجام چندین فراخوانی فشردهسازی یا رفع فشردگی، ارسال یک دیکشنری پردازششده، سربار بارگذاری دیکشنری را کاهش میدهد.
تفاوت برای فشردهسازی¶
|
دیکشنری پردازششده |
دیکشنری پردازشنشده |
پارامترهای پیشرفتهی فشردهساز که ممکن است توسط پارامترهای دیکشنری بازنویسی شوند |
window_log، hash_log، chain_log، search_log، min_match، target_length، strategy، enable_long_distance_matching، ldm_hash_log، ldm_min_match، ldm_bucket_size_log، ldm_hash_rate_log و برخی پارامترهای غیرعمومی.
|
None |
ZstdDict دیکشنری را بهصورت داخلی در نهانگاه ذخیره میکند
|
بله. بارگذاری مجدد یک دیکشنری پردازششده با همان سطح فشردهسازی، سریعتر است. |
خیر. اگر میخواهید یک دیکشنری پردازشنشده را چندین بار بارگذاری کنید، استفادهی مجدد از یک شیء فشردهساز را در نظر بگیرید. |
اگر یک ZstdDict بدون هیچ ویژگیای ارسال شود، هنگام فشردهسازی بهطور پیشفرض یک دیکشنری پردازشنشده (undigested) ارسال میشود و هنگام واگشایی، در صورت نیاز یک دیکشنری پردازششده (digested) تولید و بهطور پیشفرض ارسال میشود.
-
dict_content¶
محتوای دیکشنری Zstandard، یک شیء bytes. این همان آرگومان dict_content در متد __init__ است. میتوان از آن با برنامههای دیگر، مانند برنامهی خط فرمان zstd استفاده کرد.
-
dict_id¶
شناسهی دیکشنری Zstandard، یک مقدار عدد صحیح غیرمنفی.
غیرصفر به این معناست که دیکشنری معمولی است، توسط توابع Zstandard ایجاد شده و از قالب Zstandard پیروی میکند.
0 به معنای یک دیکشنری «محتوای خام» است، بدون هیچ محدودیت قالبی، و برای کاربران پیشرفته در نظر گرفته شده است.
نکته
معنای 0 برای ZstdDict.dict_id با ویژگی dictionary_id در تابع get_frame_info() متفاوت است.
-
as_digested_dict¶
بهصورت یک دیکشنری پردازششده بارگذاری کنید.
-
as_undigested_dict¶
بهصورت یک دیکشنری پردازشنشده بارگذاری شود.
کنترل پیشرفته پارامتر¶
-
class compression.zstd.CompressionParameter¶
یک IntEnum شامل کلیدهای پارامترهای فشردهسازی پیشرفته است که میتوان هنگام فشردهسازی دادهها از آنها استفاده کرد.
میتوان از متد bounds() برای هر ویژگی استفاده کرد تا مقادیر معتبر آن پارامتر به دست آید.
پارامترها اختیاری هستند؛ مقدار هر پارامتری که حذف شود، بهطور خودکار انتخاب میشود.
مثال دریافت کران پایین و بالای compression_level:
lower, upper = CompressionParameter.compression_level.bounds()
مثال تنظیم window_log بر روی بیشترین اندازه:
_lower, upper = CompressionParameter.window_log.bounds()
options = {CompressionParameter.window_log: upper}
compress(b'venezuelan beaver cheese', options=options)
-
bounds()¶
تاپل کرانههای عدد صحیح یک پارامتر فشردهسازی، (lower, upper)، را برمیگرداند. این متد باید روی ویژگیای فراخوانی شود که میخواهید کرانههای آن را بازیابی کنید. برای مثال، برای بهدست آوردن مقادیر معتبر compression_level، میتوانید نتیجهی CompressionParameter.compression_level.bounds() را بررسی کنید.
هر دو کران پایین و بالا شامل میشوند.
-
compression_level¶
یک راهکار سطح بالا برای تنظیم سایر پارامترهای فشردهسازی که بر سرعت و نسبت فشردهسازی دادهها اثر میگذارند.
سطحهای فشردهسازی معمولی بزرگتر از 0 هستند. مقادیر بزرگتر از 20 بهعنوان فشردهسازی «فوقالعاده» (ultra) در نظر گرفته میشوند و به حافظه بیشتری نسبت به سایر سطحها نیاز دارند. میتوان از مقادیر منفی برای به دست آوردن فشردهسازی سریعتر به قیمت نسبتهای فشردهسازی بدتر استفاده کرد.
با تنظیم سطح روی ۰، از COMPRESSION_LEVEL_DEFAULT استفاده میشود.
-
window_log¶
حداکثر فاصلهی مجاز ارجاع به عقب (back-reference) که فشردهساز میتواند هنگام فشردهسازی دادهها از آن استفاده کند، به صورت توانی از دو، 1 << window_log بایت. این پارامتر تا حد زیادی بر مصرف حافظهی فشردهسازی تأثیر میگذارد. مقادیر بالاتر به حافظهی بیشتری نیاز دارند، اما مقادیر فشردهسازی بهتری به دست میدهند.
مقدار صفر باعث میشود مقدار بهصورت خودکار انتخاب شود.
-
hash_log¶
اندازهی جدول پروب اولیه (probe table)، بهصورت توانی از ۲. میزان مصرف حافظهی حاصل، 1 << (hash_log+2) بایت است. جدولهای بزرگتر، نسبت فشردهسازی برای راهبردهای <= dfast و سرعت فشردهسازی برای راهبردهای > dfast را بهبود میدهند.
مقدار صفر باعث میشود مقدار بهصورت خودکار انتخاب شود.
-
chain_log¶
اندازهی جدول جستوجوی multi-probe، بهصورت توانی از ۲. میزان حافظهی مصرفی حاصل 1 << (chain_log+2) بایت است. جدولهای بزرگتر منجر به فشردهسازی بهتر و کندتر میشوند. این پارامتر برای راهبرد fast تأثیری ندارد. این پارامتر همچنان هنگام استفاده از راهبرد dfast مفید است، که در این حالت یک جدول probe ثانویه را تعریف میکند.
مقدار صفر باعث میشود مقدار بهصورت خودکار انتخاب شود.
-
search_log¶
تعداد تلاشهای جستوجو، بهصورت توانی از ۲. تلاشهای بیشتر منجر به فشردهسازی بهتر و کندتر میشود. این پارامتر برای راهبردهای fast و dfast بیفایده است.
مقدار صفر باعث میشود مقدار بهصورت خودکار انتخاب شود.
-
min_match¶
حداقل اندازهی تطابقهای مورد جستجو. مقادیر بزرگتر سرعت فشردهسازی و واگشایی را افزایش میدهند، اما نسبت فشردهسازی را کاهش میدهند. توجه داشته باشید که Zstandard همچنان میتواند تطابقهایی با اندازهی کوچکتر پیدا کند، فقط الگوریتم جستجوی خود را تنظیم میکند تا به دنبال این اندازه و اندازههای بزرگتر بگردد. برای همهی راهبردهای کوچکتر از btopt، حداقل مؤثر 4 است؛ برای همهی راهبردهای بزرگتر از fast، حداکثر مؤثر 6 است.
مقدار صفر باعث میشود مقدار بهصورت خودکار انتخاب شود.
-
target_length¶
تأثیر این فیلد به Strategy انتخابشده بستگی دارد.
برای راهبردهای btopt، btultra و btultra2، مقدار، طول تطابقی است که «بهاندازه کافی خوب» برای توقف جستجو در نظر گرفته میشود. مقادیر بزرگتر نسبتهای فشردهسازی را بهتر میکنند، اما فشردهسازی کندتر میشود.
برای راهبرد fast، این فاصله بین نمونهبرداری تطابق است. مقادیر بزرگتر فشردهسازی را سریعتر میکنند، اما با نسبت فشردهسازی بدتر.
مقدار صفر باعث میشود مقدار بهصورت خودکار انتخاب شود.
-
strategy¶
هرچه مقدار راهبرد انتخابشده بالاتر باشد، روش فشردهسازی استفادهشده توسط zstd پیچیدهتر میشود و به نسبتهای فشردهسازی بالاتر اما فشردهسازی کندتر منجر میشود.
-
enable_long_distance_matching¶
تطبیق با فاصلهی طولانی (long distance matching) میتواند با یافتن تطبیقهای بزرگ در فاصلههای دورتر، فشردهسازی ورودیهای بزرگ را بهبود بخشد. این قابلیت مصرف حافظه و اندازهی پنجره را افزایش میدهد.
True یا 1 تطبیق با فاصلهی طولانی (long distance matching) را فعال میکند، در حالی که False یا 0 آن را غیرفعال میکند.
فعالسازی این پارامتر، مقدار پیشفرض window_log را به ۱۲۸ MiB افزایش میدهد، مگر آنکه صریحاً مقدار دیگری برای آن تنظیم شده باشد. این تنظیم در صورتی بهصورت پیشفرض فعال میشود که window_log >= ۱۲۸ MiB و راهبرد فشردهسازی >= btopt باشد (سطح فشردهسازی ۱۶+).
-
ldm_hash_log¶
اندازهی جدول برای تطبیق فاصلهی طولانی، بهصورت توانی از ۲. مقادیر بزرگتر مصرف حافظه و نسبت فشردهسازی را افزایش میدهند، اما سرعت فشردهسازی را کاهش میدهند.
مقدار صفر باعث میشود مقدار بهصورت خودکار انتخاب شود.
-
ldm_min_match¶
حداقل اندازهی تطبیق برای تطبیقدهندهی فاصلهی بلند (long distance matcher). مقادیر بزرگتر یا بیش از حد کوچک اغلب میتوانند نسبت فشردهسازی را کاهش دهند.
مقدار صفر باعث میشود مقدار بهصورت خودکار انتخاب شود.
-
ldm_bucket_size_log¶
لگاریتم اندازهی هر سطل از جدول هش تطبیقگر فاصلهی بلند (long distance matcher) برای حل برخورد. مقادیر بزرگتر، حل برخورد را بهبود میبخشند اما سرعت فشردهسازی را کاهش میدهند.
مقدار صفر باعث میشود مقدار بهصورت خودکار انتخاب شود.
-
ldm_hash_rate_log¶
بسامد درج/جستوجوی آیتمها در جدول هش تطبیقگر فاصله بلند (long distance matcher). مقادیر بزرگتر سرعت فشردهسازی را بهبود میبخشند. انحراف زیاد از مقدار پیشفرض احتمالاً باعث کاهش نسبت فشردهسازی میشود.
مقدار صفر باعث میشود مقدار بهصورت خودکار انتخاب شود.
-
content_size_flag¶
در صورتی که اندازهی دادههایی که باید فشرده شوند پیش از فشردهسازی مشخص باشد، آن را در سرآیند فریم Zstandard بنویسید.
این پرچم تنها در سناریوهای زیر اعمال میشود:
تمام سایر فراخوانیهای فشردهسازی ممکن است اطلاعات اندازه را در سرآیند فریم (frame header) ننویسند.
True یا 1 پرچم اندازهی محتوا را فعال میکند، در حالی که False یا 0 آن را غیرفعال میکند.
-
checksum_flag¶
یک جمعآزما ۴ بایتی از محتوای فشردهنشده با استفاده از XXHash64 در پایان هر فریم نوشته میشود. کد واگشایی Zstandard این جمعآزما را تأیید میکند. در صورت عدم تطابق، استثنای ZstdError پرتاب میشود.
True یا 1 تولید جمعآزما (checksum) را فعال میکند، در حالی که False یا 0 آن را غیرفعال میکند.
-
dict_id_flag¶
هنگام فشردهسازی با یک ZstdDict، شناسهی دیکشنری در سرآیند فریم (frame header) نوشته میشود.
True یا 1 ذخیرهسازی شناسه دیکشنری را فعال میکند، در حالی که False یا 0 آن را غیرفعال میکند.
-
nb_workers¶
تعداد نخهایی را که برای فشردهسازی بهصورت موازی ایجاد خواهند شد، انتخاب کنید. هنگامی که nb_workers > ۰ باشد، فشردهسازی چند نخی فعال میشود؛ مقدار 1 به معنای «حالت چند نخی با یک نخ» است. کارگرهای بیشتر سرعت را بهبود میبخشند، اما مصرف حافظه را نیز افزایش میدهند و نسبت فشردهسازی را کمی کاهش میدهند.
مقدار صفر، چندنخی را غیرفعال میکند.
-
job_size¶
اندازهی یک کار فشردهسازی، بر حسب بایت. این مقدار تنها زمانی اعمال میشود که nb_workers بزرگتر یا مساوی ۱ باشد. هر کار فشردهسازی بهصورت موازی تکمیل میشود، بنابراین این مقدار میتواند بهطور غیرمستقیم بر تعداد نخهای فعال تأثیر بگذارد.
مقدار صفر باعث میشود مقدار بهصورت خودکار انتخاب شود.
-
overlap_log¶
تعیین میکند که چه مقدار داده از کارهای پیشین (نخها) برای کارهای جدید بارگذاری مجدد میشود تا در حین فشردهسازی توسط پنجرهی نگاه به عقب مورد استفاده قرار گیرد. این مقدار فقط زمانی استفاده میشود که nb_workers بزرگتر یا مساوی ۱ باشد. مقادیر قابلقبول از ۰ تا ۹ متغیر است.
۰ به این معناست که میزان همپوشانی بهصورت پویا تنظیم میشود
۱ به معنای عدم همپوشانی است
۹ یعنی استفاده از اندازهی کامل پنجره (window size) از کار پیشین
هر افزایش، اندازه همپوشانی را نصف/دو برابر میکند. «۸» به معنای همپوشانی window_size/2 است، «۷» به معنای همپوشانی window_size/4 است، و غیره.
-
class compression.zstd.DecompressionParameter¶
یک IntEnum شامل کلیدهای پارامترهای پیشرفتهی واگشایی که میتوان هنگام واگشایی دادهها از آنها استفاده کرد. پارامترها اختیاری هستند؛ مقدار هر پارامتری که ارائه نشود، بهطور خودکار انتخاب میشود.
میتوان از متد bounds() برای هر ویژگی استفاده کرد تا مقادیر معتبر آن پارامتر به دست آید.
مثالی برای تنظیم window_log_max روی بیشینه اندازه:
data = compress(b'Some very long buffer of bytes...')
_lower, upper = DecompressionParameter.window_log_max.bounds()
options = {DecompressionParameter.window_log_max: upper}
decompress(data, options=options)
-
bounds()¶
تاپل کرانهای عدد صحیح، (lower, upper)، برای یک پارامتر از حالت فشرده خارج کردن را برمیگرداند. این متد باید بر روی ویژگیای فراخوانی شود که میخواهید کرانهای آن را بازیابی کنید.
هر دو کران پایین و بالا شامل میشوند.
-
window_log_max¶
لگاریتم مبنای ۲ حداکثر اندازهی پنجرهی استفادهشده در حین واگشایی. این میتواند برای محدود کردن مقدار حافظهی استفادهشده هنگام واگشایی دادهها مفید باشد. بزرگتر بودن حداکثر اندازهی پنجره باعث واگشایی سریعتر میشود.
مقدار صفر باعث میشود مقدار بهصورت خودکار انتخاب شود.
-
class compression.zstd.Strategy¶
یک IntEnum که شامل راهبردهایی برای فشردهسازی است. راهبردهای با شماره بالاتر، فشردهسازی پیچیدهتر و کندتری دارند.
نکته
مقادیر ویژگیهای Strategy لزوماً در نسخههای مختلف zstd پایدار نیستند. تنها میتوان به ترتیب ویژگیها اتکا کرد. ویژگیها در زیر به ترتیب فهرست شدهاند.
راهبردهای زیر در دسترس هستند:
-
fast¶
-
dfast¶
-
greedy¶
-
lazy¶
-
lazy2¶
-
btlazy2¶
-
btopt¶
-
btultra¶
-
btultra2¶
متفرقه¶
-
compression.zstd.get_frame_info(frame_buffer)¶
یک شیء FrameInfo حاوی فراداده در مورد یک فریم Zstandard را بازیابی کنید. فریمها حاوی فراداده مربوط به دادههای فشردهای هستند که در خود نگه میدارند.
-
class compression.zstd.FrameInfo¶
فرادادهی مربوط به یک فریم Zstandard.
-
decompressed_size¶
اندازهی محتوای غیرفشردهی فریم.
-
dictionary_id¶
یک عدد صحیح که شناسهی دیکشنری Zstandard موردنیاز برای واگشایی فریم را نشان میدهد. 0 یعنی شناسهی دیکشنری در سرآیند فریم ثبت نشده است. این ممکن است به این معنا باشد که به دیکشنری Zstandard نیازی نیست، یا شناسهی یک دیکشنری موردنیاز ثبت نشده است.
-
compression.zstd.COMPRESSION_LEVEL_DEFAULT¶
سطح فشردهسازی پیشفرض برای Zstandard: 3.
-
compression.zstd.zstd_version_info¶
شماره نسخه کتابخانه zstd در رانتایم بهصورت یک تاپل از اعداد صحیح (major, minor, release).
مثالها¶
خواندن از یک پرونده فشرده:
from compression import zstd
with zstd.open("file.zst") as f:
file_content = f.read()
ایجاد یک پرونده فشرده:
from compression import zstd
data = b"Insert Data Here"
with zstd.open("file.zst", "w") as f:
f.write(data)
فشردهسازی دادهها در حافظه:
from compression import zstd
data_in = b"Insert Data Here"
data_out = zstd.compress(data_in)
فشردهسازی تدریجی:
from compression import zstd
comp = zstd.ZstdCompressor()
out1 = comp.compress(b"Some data\n")
out2 = comp.compress(b"Another piece of data\n")
out3 = comp.compress(b"Even more data\n")
out4 = comp.flush()
# Concatenate all the partial results:
result = b"".join([out1, out2, out3, out4])
نوشتن دادههای فشرده در پروندهای که از قبل باز است:
from compression import zstd
with open("myfile", "wb") as f:
f.write(b"This data will not be compressed\n")
with zstd.open(f, "w") as zstf:
zstf.write(b"This *will* be compressed\n")
f.write(b"Not compressed\n")
ایجاد یک پرونده فشرده با استفاده از پارامترهای فشردهسازی:
from compression import zstd
options = {
zstd.CompressionParameter.checksum_flag: 1
}
with zstd.open("file.zst", "w", options=options) as f:
f.write(b"Mind if I squeeze in?")
© حق نشر 2001 Python Software Foundation.
این صفحه تحت مجوز بنیاد نرمافزار پایتون نسخه ۲ منتشر شده است.
مثالها، دستورالعملها، و سایر کدهای موجود در مستندات همچنین تحت مجوز بدون بند BSD منتشر شدهاند.
برای اطلاعات بیشتر به تاریخچه و مجوز مراجعه کنید.
بنیاد نرمافزار پایتون یک شرکت غیرانتفاعی است.
لطفاً کمک مالی کنید.
آخرین بهروزرسانی در نوامبر 12, 2026 (06:19 UTC).
آیا اشکالی یافتید؟
ساخته شده با Sphinx 9.1.0.
|