از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
روش ترشی و برداشتن اشیاء در پایتون
سرفصلهای مطلب
معرفی
تبدیل یک شی به حالت ذخیره (مانند جریان بایت، نمایش متنی و غیره) نامیده می شود. سریال سازی، در حالیکه سریال زدایی داده ها را از فرمت فوق به یک شی تبدیل می کند. یک قالب سریالی تمام اطلاعات مورد نیاز برای بازسازی یک شی را در همان حالتی که هنگام سریال سازی بود، حفظ می کند.
در این راهنما، روش سریالسازی و سریالزدایی دادهها در پایتون را با استفاده از برنامه یاد خواهید گرفت ترشی مدول. ما علاوه بر این، با دادههایی که سریالسازی/غیرمرزی شدهاند، با پانداها کار خواهیم کرد.
Pickling و Unpickling در پایتون چیست؟
پایتون دارای یک بسته داخلی است که به نام pickle
، که می تواند برای انجام عملیات ترشی کردن و برداشتن ترشی استفاده شود.
اسید شویی و ترشی کردن در پایتون است process که برای توصیف تبدیل اشیا به جریان بایت و بالعکس – سریال سازی و سریال زدایی با استفاده از پایتون استفاده می شود. pickle
مدول. بیایید به چند نمونه نگاه کنیم!
توجه داشته باشید: را pickle
ماژول در کتابخانه استاندارد از پایتون 3.x به بعد در دسترس است.
کد زیر را در نظر بگیرید که محتویات یک فرهنگ لغت را چاپ می کند:
import pickle
athletes = {
"Name": ("Cristiano Ronaldo", "Lionel Messi", "Eden Hazard", "Luis Suarez", "Neymar"),
"Club": ("Manchester United", "PSG", "Real Madrid", "Atletico Madrid", "PSG")
}
print(athletes)
این منجر به:
{
'Name': ('Cristiano Ronaldo', 'Lionel Messi', 'Eden Hazard', 'Luis Suarez', 'Neymar'),
'Club': ('Manchester United', 'PSG', 'Real Madrid', 'Atletico Madrid', 'PSG')
}
بیایید سعی کنیم “ترشی” کنیم athletes
شی به یک فایل باینری ما می توانیم این کار را با dump()
تابع. این دو پارامتر نیاز دارد – شی “ترشی” و a File
شیء برای نوشتن داده ها. کد زیر داده ها را به یک فایل جدید “ترشی” می کند athletes.txt
که در همان فهرستی که اسکریپت در آن اجرا می شود ایجاد می شود:
athletes_file = open('athletes.txt', 'wb')
pickle.dump(athletes, athletes_file)
athletes_file.close()
توجه داشته باشید: حالتی که در مدیریت فایل استفاده کرده ایم این است "wb"
که برای نوشتن فایل های باینری استفاده می شود. از آنجایی که ما در حال تبدیل شی به جریان بایت هستیم، از آن استفاده خواهیم کرد "b"
با هر حالت در هنگام مدیریت فایل ها.
محتویات فایل ایجاد شده توسط یک ویرایشگر متن معمولی قابل مشاهده نیست زیرا داده های باینری است و قرار نیست در قالبی قابل خواندن توسط انسان ذخیره شود. برای خواندن این اطلاعات، باید این دادهها را “لغزش” یا غیرمستقیم کنیم. ما می توانیم این کار را با load()
تابع!
را load()
تابع محتویات یک فایل “pickled” را می خواند و شی ساخته شده با خواندن داده ها را برمی گرداند. نوع شی و همچنین حالت آن بستگی دارد روی محتویات فایل از آنجایی که ما یک فرهنگ لغت با نام ورزشکاران ذخیره کردهایم – این شی با همان ورودیها بازسازی میشود. بیایید فایل “ترشی” را که به تازگی ایجاد کردید به یک شی پایتون و print محتویات آن:
import pickle
athletes_file = open("athletes.txt", "rb")
athletes = pickle.load(athletes_file)
athletes_file.close()
print(athletes)
این منجر به:
{'Name': ('Cristiano Ronaldo', 'Lionel Messi', 'Eden Hazard', 'Luis Suarez', 'Neymar'), 'Club': ('Manchester United', 'PSG', 'Real Madrid', 'Atletico Madrid', 'PSG')}
همانطور که می بینید، ما تمام داده هایی را که “ترشی” شده بودند، برمی گردیم.
توجه داشته باشید: درست مثل روش استفاده ما "wb"
برای نوشتن داده های باینری، از آن استفاده کردیم "rb"
حالت در حین مدیریت فایل برای خواندن داده های باینری.
اکنون که ما آن را پوشش دادیم process در مورد «ترشی کردن» و «بازکردن ترشی» در پایتون، بیایید فایلهای «ترشی» را بخوانیم تا بتوانیم محتوای آنها را در پاندا قرار دهیم. DataFrame
!
چگونه یک فایل Pickle را در یک دیتا فریم پاندا بخوانیم؟
ما از همان داده هایی که در مثال های قبلی استفاده کردیم استفاده خواهیم کرد. ابتدا مطمئن شوید که کتابخانه Pandas را نصب کرده اید:
$ pip install pandas
حالا بیایید با تبدیل اشیاء به یک DataFrame پایتون شروع کنیم:
import pickle
import pandas as pd
athletes = {
"Name": ("Cristiano Ronaldo", "Lionel Messi", "Eden Hazard", "Luis Suarez", "Neymar"),
"Club": ("Manchester United", "PSG", "Real Madrid", "Atletico Madrid", "PSG")
}
df = pd.DataFrame(athletes)
print(df)
این منجر به:
Name Club
0 Cristiano Ronaldo Manchester United
1 Lionel Messi PSG
2 Eden Hazard Real Madrid
3 Luis Suarez Atletico Madrid
4 Neymar PSG
همانطور که در خروجی مشاهده می کنید، یک شی Pandas DataFrame با 3 ستون و 6 ردیف شامل اندیس ها دریافت می کنیم. پس از این، process شبیه روش برخورد ما با اشیاء عادی و غیر DataFrame است. ما از مدیریت فایل همراه با استفاده از dump()
و load()
روش هایی برای ایجاد ابتدا یک فایل “pickle” از پانداها DataFrame
و سپس جریان بایت را بخوانید تا پانداها را دریافت کنید DataFrame
:
df = pd.DataFrame(athletes)
athelets_df_file = open("athletes_df.txt", "wb")
pickle.dump(df, athelets_df_file)
athelets_df_file.close()
کد بالا یک فایل “pickle” ایجاد می کند که Pandas DataFrame را به عنوان یک جریان بایت در فهرست فعلی ما ذخیره می کند. athletes_df.txt
.
وقتی میخواهیم دوباره از این DataFrame استفاده کنیم، فقط میتوانیم این فایل را حذف کنیم تا آن را برگردانیم:
import pickle
athletes_df_file = open("athletes_df.txt", "rb")
athletes = pickle.load(athletes_df_file)
athletes_df_file.close()
print(athletes)
این منجر به:
Name Club
0 Cristiano Ronaldo Manchester United
1 Lionel Messi PSG
2 Eden Hazard Real Madrid
3 Luis Suarez Atletico Madrid
4 Neymar PSG
این چیز شگفت انگیز در مورد فایل های “ترشی” است! ما فقط محتویات ذخیره شده را دریافت نمی کنیم DataFrame
وقتی آن را بارگذاری می کنیم، شی را دریافت می کنیم DataFrame
خود شی بدون این قابلیتها، معمولاً برنامهنویسان دادهها را در قالبی در دسترس مانند JSON ذخیره میکنند و سپس دادههای JSON را در یک شی جدید برای استفاده از آن بارگذاری میکنند.
اسید شویی و ترشی کردن ما را از استفاده از قالبهای دادههای میانی و ایجاد روشهایی برای بارگذاری دادههایمان نجات دهد.
Pickling into strings و Unpickling from strings
خوب است بدانید که pickle
ماژول نیز در اختیار ما قرار می دهد dumps()
و loads()
روش ها نیز این روشها اشیاء پایتون را «ترشی» و «برداشته میکنند»، اما به جای استفاده از یک فایل باینری برای ذخیره دادهها، دادههای رشتهای را برمیگردانند و میپذیرند.
بیایید به یک مثال ساده نگاهی بیندازیم تا بفهمیم چگونه dumps()
و loads()
روش ها در پایتون کار می کنند:
import pickle
simple_obj = {1: ('o', 'n', 'e'), "two": (1, 2), 3: "Three"}
pickled_obj = pickle.dumps(simple_obj)
print(pickled_obj)
این منجر به:
b'\x80\x04\x95-\x00\x00\x00\x00\x00\x00\x00}\x94(K\x01)\x94(\x8c\x01o\x94\x8c\x01n\x94\x8c\x01e\x94e\x8c\x03two\x94K\x01K\x02\x86\x94K\x03\x8c\x05Three\x94u.'
همانطور که در خروجی می بینید، رشته باینری به جای یک فایل “pickled” که با dump()
روش. ما می توانیم این رشته را گرفته و شی را در یک متغیر جدید بارگذاری کنیم:
out = pickle.loads(obj)
print(out)
این منجر به:
{1: ('o', 'n', 'e'), 'two': (1, 2), 3: 'Three'}
این دو روش انتقال آسانتر بین برنامههای مبتنی بر پایتون را تسهیل میکنند و به خوبی میتوانید دادههای «ترشی» را از طریق APIها ارسال کنید. اما معمولاً برای برنامه های تحت وب مبتنی بر پایتون، به جای آن از اشیاء سریالی JSON استفاده می کنید.
نتیجه
در این مقاله، با عملیات «ترشی کردن» و «لغزیدن» در پایتون آشنا شدیم که برای ذخیره اشیاء شما برای استفاده بعدی مفید است. روش هایی مانند load()
، loads()
، dump()
، dumps()
توسط داخلی ارائه می شوند pickle
ماژول برای تبدیل اشیاء پایتون به و از جریان های بایتی.
ایجاد و بارگذاری داده ها به و از یک پاندا DataFrame
شیء را می توان به راحتی با استفاده از pickle
ماژول در پایتون
توجه داشته باشید که اگر میخواهید از اشیاء در زبانهای برنامهنویسی دیگر استفاده کنید، «ترشی کردن» و «برداشتن» توصیه نمیشود، زیرا این ماژول سازگاری بین برنامهنویسی را تضمین نمیکند.
(برچسبها به ترجمه)# python(T)# پاندا (T)# قالب بندی پرونده
منتشر شده در 1403-01-07 02:16:08