وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

روش ترشی و برداشتن اشیاء در پایتون

0 5
زمان لازم برای مطالعه: 5 دقیقه


معرفی

تبدیل یک شی به حالت ذخیره (مانند جریان بایت، نمایش متنی و غیره) نامیده می شود. سریال سازی، در حالیکه سریال زدایی داده ها را از فرمت فوق به یک شی تبدیل می کند. یک قالب سریالی تمام اطلاعات مورد نیاز برای بازسازی یک شی را در همان حالتی که هنگام سریال سازی بود، حفظ می کند.

در این راهنما، روش سریال‌سازی و سریال‌زدایی داده‌ها در پایتون را با استفاده از برنامه یاد خواهید گرفت ترشی مدول. ما علاوه بر این، با داده‌هایی که سریال‌سازی/غیرمرزی شده‌اند، با پانداها کار خواهیم کرد.

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() تابع!

پیشنهاد می‌کنیم بخوانید:  ابزارهای تکرار پایتون: filter()، islice()، map() و zip()

را 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() روش ها نیز این روش‌ها اشیاء پایتون را «ترشی» و «برداشته می‌کنند»، اما به جای استفاده از یک فایل باینری برای ذخیره داده‌ها، داده‌های رشته‌ای را برمی‌گردانند و می‌پذیرند.

پیشنهاد می‌کنیم بخوانید:  رفع مشکلات focus() در جاوا اسکریپت (حل شد)

بیایید به یک مثال ساده نگاهی بیندازیم تا بفهمیم چگونه 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

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید