مقدمه
بسیاری از برنامهها نیاز دارند تا دادههای تولید شده توسط کاربر را به خاطر بسپارند تا در اجراهای
بعدی نیز در دسترس باشند. برای مثال، یک بازی ممکن است بخواهد بالاترین امتیاز یا تنظیمات کاربر را
ذخیره کند. ماژول json (مخفف JavaScript Object Notation) در پایتون به ما اجازه میدهد تا
ساختارهای داده ساده پایتون (مانند لیستها و دیکشنریها) را در یک فایل ذخیره کرده و بعداً آنها را
دوباره بخوانیم.
فرمت JSON نه تنها در پایتون، بلکه در بسیاری از زبانهای برنامهنویسی دیگر نیز محبوب است و این
باعث میشود که اشتراکگذاری داده بین برنامههای نوشتهشده با زبانهای مختلف، بسیار آسان شود.
استفاده از json.dump() برای ذخیره داده
تابع json.dump() دو آرگومان میگیرد: دادهای که باید ذخیره شود، و
یک شیء فایل که مشخص میکند دادهها کجا باید نوشته شوند.
PYTHON
import json
numbers = [2, 3, 5, 7, 11, 13]
filename = 'numbers.json'
with open(filename, 'w') as f:
json.dump(numbers, f)
در این کد، ابتدا ماژول json را وارد میکنیم. سپس یک لیست از اعداد تعریف میکنیم.
در نهایت، فایل numbers.json را در حالت نوشتن ('w') باز کرده و با استفاده از json.dump()، لیست اعداد را در آن مینویسیم. اگر این فایل را باز
کنید، خواهید دید که لیستی شبیه به لیست پایتون در آن ذخیره شده است.
استفاده از json.load() برای خواندن داده
حالا بیایید برنامهای بنویسیم که دادههای ذخیره شده در فایل numbers.json را بخواند و آنها
را دوباره به یک لیست پایتون تبدیل کند.
PYTHON
import json
filename = 'numbers.json'
with open(filename) as f:
numbers = json.load(f)
print(numbers)
تابع json.load() یک شیء فایل را گرفته، محتوای JSON آن را خوانده و
به یک ساختار داده پایتون (در این مورد، یک لیست) تبدیل میکند. خروجی این برنامه، لیستی خواهد بود
که در مرحله قبل ذخیره کرده بودیم.
یک مثال ترکیبی: ذخیره و بازیابی نام کاربری
بیایید این دو مفهوم را ترکیب کرده و برنامهای بنویسیم که نام کاربری را از کاربر گرفته، آن را
ذخیره کند و در اجراهای بعدی، به کاربر خوشامد بگوید.
PYTHON
import json
filename = 'username.json'
try:
with open(filename) as f:
username = json.load(f)
except FileNotFoundError:
username = input("What is your name? ")
with open(filename, 'w') as f:
json.dump(username, f)
print(f"We'll remember you when you come back, {username}!")
else:
print(f"Welcome back, {username}!")
این برنامه ابتدا سعی میکند فایل username.json را بخواند. اگر فایل وجود نداشته باشد
(اولین اجرای برنامه)، یک FileNotFoundError رخ میدهد. در بلاک except، ما نام را از کاربر
پرسیده و آن را در فایل ذخیره میکنیم.
در اجراهای بعدی، فایل وجود خواهد داشت و بلاک try با موفقیت اجرا میشود. سپس کنترل به بلاک
else منتقل شده و پیام خوشامدگویی به کاربر نمایش داده میشود.
در این درس، با استفاده از ماژول json، روشی ساده و استاندارد برای ذخیرهسازی و بازیابی
دادههای ساختاریافته را یاد گرفتیم. با این درس، فصل «فایلها و استثناها» به پایان میرسد. شما
اکنون میتوانید با فایلها کار کرده و خطاهای زمان اجرا را به صورت کنترلشده مدیریت کنید. در فصل
بعدی، به سراغ «آزمایش کدها» خواهیم رفت و یاد میگیریم که چگونه با نوشتن تستهای خودکار، از صحت و
پایداری برنامههای خود اطمینان حاصل کنیم.