ذخیره‌سازی داده‌ها

بسیاری از برنامه‌های شما از کاربران می‌خواهند که انواع خاصّی اطّلاعات را وارد کنند. ممکن است به کاربران امکان دهید که تنظیمات پیش‌فرض خود را در یک بازی ذخیره یا داده‌هایی را برای بصری‌سازی ارائه کنند. تمرکزِ برنامه‌ی شما بر هر چیزی باشد، شما اطّلاعاتی را که کاربر ارائه می‌کند در ساختمان‌های داده‌ای مانند لیست‌ها و دیکشنری‌ها ذخیره می‌کنید. زمانی که کاربران برنامه‌ای را می‌بندند تقریباً همیشه می‌خواهید که اطّلاعات وارد شده را ذخیره کنید. یک راه ساده برای این کار ذخیره کردن داده به کمک ماژول json است.

ماژول json به شما امکان می‌دهد که ساختمان‌های داده‌ی ساده‌ی پایتون را درون یک فایل بریزید و دفعه‌ی بعد که برنامه اجرا شد آن‌ها را دوباره بارگذاری کنید. همچنین می‌توانید از json برای به اشتراک گذاشتن اطّلاعات بین برنامه‌های مختلف پایتون استفاده کنید. و حتّی بهتر از این، شکل داده‌ی JSON منحصر به پایتون نیست بنابراین می‌توانید داده‌هایی را که به صورت JSON ذخیره کرده‌اید با افرادی که با بسیاری دیگری از زبان‌های برنامه‌نویسی کار می‌کنند به اشتراک بگذارید.

نکته
JSON در ابتدا برای جاوا‌اسکریپت توسعه داده شد. با این حال مدت‌هاست که به عنوان شکل فایلی مشترک بین زبان‌های بسیاری از جمله پایتون تبدیل شده است.

استفاده از json.dump() و json.load()

بیایید برنامه‌ای برای ذخیره کردن مجموعه‌ای عدد و برنامه‌ای دیگر برای خواندن دوباره‌ی آن عدد بنویسیم. برنامه‌ی اوّل از json.dump() برای ذخیره کردن مجموعه‌ی اعداد و برنامه‌ی دوم از json.load() استفاده می‌کند.

تابع json.dump() دو نشان‌وند می‌گیرد: قطعه‌ای داده و شیء فایلی که برای ذخیره کردن آن استفاده می‌شود. اینجا چگونگی استفاده از json.dump() را برای ذخیره کردن یک لیست اعداد می‌بینید:

1
2
3
4
5
6
7
8
import json

numbers = [2, 3, 5, 7, 11, 13]

filename = 'numbers.json'

with open(filename, 'w') as f:
    json.dump(numbers, f)

ابتدا ماژول json را وارد می‌کنیم و لیستی از اعداد می‌سازیم. در ۱ نام فایلی را که در آن لیست اعداد ذخیره می‌شود انتخاب می‌کنیم. برای نشان دادن این که داده‌ها در فایل به شکل JSON ذخیره می‌شوند، مرسوم است که از پسوند .json برای آن استفاده کنیم. سپس در ۲ فایل را در حالت نوشتن باز می‌کنیم تا به json اجازه بدهیم داده‌ها را در فایل بنویسد. در ۳ از تابع json.dump() برای ذخیره کردن لیست numbers در فایل numbers.json استفاده می‌کنیم.

این برنامه هیچ خروجی‌ای ندارد امّا اجازه دهید فایل numbers.json را باز کنیم و نگاهی به آن بیندازیم. داده به همان شکلی ذخیره شده که در پایتون دیده می‌شود:

1
[2, 3, 5, 7, 11, 13]

حال برنامه‌ای می‌نویسیم که از json.load() استفاده کرده، لیست را دوباره خوانده و به حافظه منتقل می‌کند:

1
2
3
4
5
6
7
8
import json

filename = 'numbers.json'

with open(filename) as f:
    numbers = json.load(f)

print(numbers)

در ۱ مطمئن می‌شویم که اطّلاعات را از همان فایلی می‌خوانیم که در آن ذخیره کرده‌ایم. این بار فایل را در حالت خواندن باز می‌کنیم چون پایتون تنها نیاز دارد که فایل را بخواند (۲). در ۳ از تابع json.load() برای بارگذاری اطّلاعات ذخیره‌شده در numbers.json استفاده می‌کنیم و آن را به متغیّر numbers نسبت می‌دهیم. در نهایت لیست اعداد بازیابی‌شده را چاپ می‌کنیم و می‌بینیم که همان لیست ساخته‌شده در number_writer.py است:

1
[2, 3, 5, 7, 11, 13]

این راهی ساده برای به اشتراک گذاشتن داده‌ها بین دو برنامه است.