استفاده از ماژول Pickle
Pickle پرونده ها
برای استفاده از Pickle ، با import آن در پایتون شروع کنید.
import pickle
برای این آموزش ، شما یک دیکشنری ساده را ایجاد خواهید کرد. دیکشنری لیستی از عناصر کلیدی است: مقدار. شما آن را در یک پرونده ذخیره کرده و دوباره بارگیری می کنید. فرهنگ لغت را به این صورت اعلام کنید:
dogs_dict = { 'Ozzy': 3, 'Filou': 8, 'Luna': 5, 'Skippy': 10, 'Barco': 12, 'Balou': 9, 'Laika': 16 }
برای Pickle این فرهنگ لغت ، ابتدا باید نام فایلی را که برای آن می نویسید مشخص کنید ، که در این مورد سگ است.
توجه داشته باشید که پرونده پسوند ندارد.
برای باز کردن پرونده برای نوشتن ، به سادگی از تابع open () استفاده کنید. اولین آرگومان باید نام پرونده شما باشد. بحث دوم "wb" است. w به این معنی است که شما در پرونده می نویسید و b به حالت باینری اشاره دارد. این بدان معنی است که داده ها به صورت اشیا بایت نوشته می شوند. اگر b را فراموش کنید ، یک TypeError: باید str باشد ، بایت بر نمی گردد. ممکن است گاهی اوقات با نمادی کمی متفاوت روبرو شوید. w + b ، اما نگران نباشید ، همان عملکرد را فراهم می کند.
filename = 'dogs'
outfile = open(filename,'wb')
پس از باز شدن پرونده برای نوشتن ، می توانید از pickle.dump () استفاده کنید ، که دو آرگومان طول می کشد: شی ای که می خواهید Pickle کنید و پرونده ای که باید شی which در آن ذخیره شود. در این حالت ، اولین مورد سگ خواهد بود ، در حالی که دومی از پرونده خارج خواهد شد.
فراموش نکنید که پرونده را با close () ببندید!
pickle.dump(dogs_dict,outfile)
outfile.close()
اکنون ، یک پرونده جدید به نام سگها باید در همان پوشه اسکریپت پایتون شما ظاهر شده باشد (مگر اینکه مسیر پرونده را به عنوان نام فایل مشخص کنید).
پاک کردن پرونده ها
روند بارگیری مجدد یک فایل Pickle در برنامه Python مشابه همان کاری است که قبلاً مشاهده کردید: دوباره از تابع open () استفاده کنید ، اما این بار با 'rb' به عنوان آرگومان دوم (به جای wb) استفاده می شود. r مخفف حالت خواندن و b مخفف حالت باینری است. شما یک فایل باینری را می خوانید. این را به infile اختصاص دهید. در مرحله بعد ، از pickle.load () ، با عنوان infile به عنوان استدلال استفاده کنید و آن را به new_dict اختصاص دهید. محتویات پرونده اکنون به این متغیر جدید اختصاص داده شده است. دوباره ، باید پرونده را در پایان ببندید.
infile = open(filename,'rb')
new_dict = pickle.load(infile)
infile.close()
برای اطمینان از اینکه آن را با موفقیت برداشتید ، می توانید فرهنگ لغت را چاپ کنید ، آن را با فرهنگ لغت قبلی مقایسه کنید و نوع آن را با type() بررسی کنید.
print(new_dict)
print(new_dict==dogs_dict)
print(type(new_dict))
خروجی:
{'Ozzy': 3, 'Filou': 8, 'Luna': 5, 'Skippy': 10, 'Barco': 12, 'Balou': 9, 'Laika': 16}
True
<class 'dict'>
فشرده سازی پرونده های Pickle
اگر در حال ذخیره یک مجموعه داده بزرگ هستید و فایل Pickle شما فضای زیادی را اشغال می کند ، ممکن است بخواهید آن را فشرده کنید. این کار را می توان با استفاده از bzip2 یا gzip انجام داد. هر دو پرونده را فشرده می کنند ، اما bzip2 کمی کندتر است. با این وجود gzip پرونده هایی تقریباً دو برابر bzip2 تولید می کند. شما در این آموزش از bzip2 استفاده خواهید کرد.
به یاد داشته باشید که فشرده سازی و سریال سازی یکسان نیست! می توانید به ابتدای آموزش برگردید تا در صورت لزوم حافظه خود را تازه کنید.
با وارد کردن bzip2 با import bz2 شروع کنید. واردات Pickle به همان روش ابتدای این آموزش انجام می شود.
import bz2
import pickle
sfile = bz2.BZ2File('smallerfile', 'w')
pickle.dump(dogs_dict, sfile)
پرونده جدیدی به نام smallfile باید ظاهر می شد. به خاطر داشته باشید که تفاوت در اندازه پرونده در مقایسه با نسخه غیر فشرده با ساختارهای کوچک جسم قابل مشاهده نخواهد بود.