فایل ها را می توانیم به دو گونه فایل های متنی ساده و فایل های دودویی (Binary) دسته بندی کنیم. در پایتون با متد ()open می توانیم هر فایلی را بخوانیم، برای نمونه اگر فایل متنی ساده مانند یک فایل txt یا یک فایل CSV را بخوانیم، برگشتی آن همان درون مایه فایل txt یا csv است ولی اگر فایل دودویی مانند یک فایل Excel یا فایل صورتی، تصویری و ودیدو را با آن باز کنیم، برگشتی آن رشته های هگزا دسیمال است. ماژول درونی struct دارای تابع های برای تبدیل رشته ای از بایت ها به گونه ای (نوعی) بومی و درونی پایتون است. این گونه های بومی می توانند int, str, float باشند.

بسته بندی داده های بومی پایتون به رشته بایت ها و وارونه این کار

ماژول struct را می توانیم برای بسته بندی (Packing) داده های گونه بومی به یک رشته و باز کردن بسته از یک رشته به یکی از گونه های بومی پایتون به کار ببریم. رشته های فرمت (Format String) مکانیزم مورد استفاده برای مشخص کردن طرح مورد انتظار هنگام بسته بندی و باز کردن بسته های داده است. آنها ازکاراکترهای Format ساخته شده اند ، که نوع داده های بسته بندی شده / باز نشده را مشخص می کند. توجه کنید که این بسته بندی برای نمونه زمانی به کار می رود که می خواهیم یک داده را بر روی شبکه بفرستیم. در یک سو تابع ()pack بسته بندی را انجام می دهد و در سوی دیگر باز کردن بسته بدست تابع ()unpack انجام می شود.

آرگومان یکم تابع ()pack آن Format String است. بنابراین با توجه به الگوی زیر، مقدارهای …,v1,v2 به فرمت آرگومان یکم بسته بندی می شوند. دومین کد زیر الگوی تابع ()unpack را نشان می دهد که آرگومان یکم آن همان Format String است که می خواهیم آرگومان دوم را با آن از بسته بندی باز کنیم. در واقع می خواهیم آرگومان دوم، یعنی buffer را که پیش از این با تابع ()pack و با یک فرمت، بسته بندی شده بود را با همان فرمت از بسته بندی باز کنیم.

کد زیر کاربرد هر دو تابع را نشان می دهد. در آغاز، سه تابع ()pack و ()unpack و ()calcsize را به درون برنامه پیوست می کند. سپس متغیری رشته ای به نام format_string می سازیم که به ترتیب از سه کاراکتر h و i و l و f تشکیل شده است. با توجه به شکل زیر، می بنید که h برای نمونه همسان با short int در زبان سی و l همسان long int در زبان سی هستند.

آرگومان نخست تابع ()pack همین متغیر format_string است و سپس چهار مقدار آمده اند. توجه کنید شمار آرگومان دوم به بعد باید با شمار کاراکترهای رشته فرمت یکسان باشند. پس از این، تابع ()calcsize با مقدار متغیر format_string فراخوانی شده است که خروجی آن شماره 16 (بایت) است. زیرا h یا همان short int برابر با 2 بایت، i یا همان int و l یا همان long int و f یا همان float برابر با 4 بایت هستند که در مجموع 16 بایت را می سازند.

در پایان متد ()unpack با آرگومان یکم، همان متغیر format_string و آرگومان دوم، همان داده های بسته بندی شده به یک رشته، فراخوانی می شود که برگشتی آن همان داده های نخستین ما هستند که در آرگومان دوم به بعد در ()pack نشان داده شدند. شکل زیر خروجی کد را نشان می دهد.

دانلود اسکریپت