آموزش پایتون (python) با فیبیست– سطح 2 را با رویکرد ذخیره اطلاعات دنبال می کنیم. در این سطح به مطالبی می پردازیم که مهارت های کدنویسی شما را به درون حافظه های ویندوز یا گوشی یا هر وسیله دیگری منتقل می کنند.
درس ۱۳ پایتون
ذخیرهسازی اطلاعات در حافظه سیستم
پروژه: جمع دو عدد و ذخیره نتیجه در یک فایل
در درسهای قبلی، اطلاعات را از کاربر دریافت میکردیم، محاسبه انجام میدادیم و نتیجه را روی صفحه نمایش میدادیم.
اما اطلاعاتی که فقط با print() نمایش داده میشوند، برای استفاده بعدی ذخیره نشدهاند.
در این درس یاد میگیریم چگونه نتیجه یک برنامه را در یک فایل متنی ذخیره کنیم.
کد برنامه
# ============================================================
# فیبیست | PHY20
# آموزش برنامهنویسی پایتون
# ============================================================
#
# وبسایت:
# https://www.phy20.com
#
# طراح و برنامهنویس:
# مرتضی محمدیوند خوشخو
#
# تاریخ:
# ..............................
#
# مجوز و لایسنس کد:
# استفاده از این کد برای مقاصد آموزشی و
# بدون مقاصد تجاری رایگان است.
#
# مالکیت معنوی:
# تمامی حقوق معنوی این کد متعلق به فیبیست (PHY20)
# و طراح و برنامهنویس آن محفوظ است.
#
# ============================================================
# دریافت دو عدد از کاربر
number1 = int(
input("Enter the first number: ")
)
number2 = int(
input("Enter the second number: ")
)
# محاسبه حاصل جمع
result = number1 + number2
# نمایش نتیجه
print("Result:", result)
# ذخیره اطلاعات در فایل متنی
file = open("result.txt", "w")
file.write(
"First number: " + str(number1) + "n"
)
file.write(
"Second number: " + str(number2) + "n"
)
file.write(
"Result: " + str(result)
)
# بستن فایل
file.close()
print("The result has been saved.")
این برنامه چه کاری انجام میدهد؟
فرض کنید کاربر وارد کند:
Enter the first number: 25
Enter the second number: 17
پایتون محاسبه میکند:
25 + 17 = 42
و روی صفحه مینویسد:
Result: 42
اما کار مهم دیگری هم انجام میدهد.
یک فایل به نام:
result.txt
میسازد.
محتوای فایل تقریباً این خواهد بود:
First number: 25
Second number: 17
Result: 42
مفهوم جدید: open()
این دستور:
file = open("result.txt", "w")
فایل را برای نوشتن باز میکند.
قسمت اول:
"result.txt"
نام فایل است.
قسمت دوم:
"w"
مخفف:
write
است؛ یعنی میخواهیم در فایل بنویسیم.
دستور write()
برای نوشتن اطلاعات داخل فایل از:
file.write()
استفاده میکنیم.
مثلاً:
file.write("Hello Python")
متن Hello Python را داخل فایل مینویسد.
چرا از str() استفاده کردیم؟
متغیرهای:
number1
number2
result
عدد هستند.
اما write() برای نوشتن این ترکیب به متن نیاز دارد.
بنابراین:
str(number1)
عدد را به متن تبدیل میکند.
مثلاً:
42
تبدیل میشود به:
"42"
مفهوم n
در این قسمت:
file.write(
"First number: " + str(number1) + "n"
)
علامت:
"n"
یعنی:
برو به خط بعد.
بنابراین اطلاعات فایل مرتب و خطبهخط ذخیره میشوند:
First number: 25
Second number: 17
Result: 42
چرا file.close() مهم است؟
در پایان:
file.close()
فایل را میبندیم.
یعنی به پایتون اعلام میکنیم:
کار ما با این فایل تمام شده است.
این کار باعث میشود اطلاعات بهدرستی ثبت شوند و فایل دیگر در حالت باز باقی نماند.
یک مفهوم مهم
تا اینجا دو نوع خروجی داریم:
خروجی روی صفحه
print("Result:", result)
نتیجه را فقط به کاربر نشان میدهد.
خروجی در حافظه سیستم
file.write(...)
اطلاعات را در یک فایل ذخیره میکند.
پس:
input()
↓
محاسبه
↓
print()
↓
نمایش روی صفحه
و همزمان:
محاسبه
↓
write()
↓
result.txt
↓
ذخیره در حافظه
این نخستین قدم برای ورود به دنیای ذخیرهسازی دادهها با پایتون است.
درس ۱۴ پایتون
فراخوانی اطلاعات از حافظه سیستم
پروژه: خواندن اطلاعات ذخیرهشده در فایل
در درس ۱۳، حاصل جمع دو عدد را در فایل:
result.txt
ذخیره کردیم.
حالا میخواهیم پایتون این فایل را دوباره باز کند، اطلاعات داخل آن را بخواند و روی صفحه نمایش دهد.
کد برنامه
# ============================================================
# فیبیست | PHY20
# آموزش برنامهنویسی پایتون
# ============================================================
#
# وبسایت:
# https://www.phy20.com
#
# طراح و برنامهنویس:
# مرتضی محمدیوند خوشخو
#
# تاریخ:
# ..............................
#
# مجوز و لایسنس کد:
# استفاده از این کد برای مقاصد آموزشی و
# بدون مقاصد تجاری رایگان است.
#
# مالکیت معنوی:
# تمامی حقوق معنوی این کد متعلق به فیبیست (PHY20)
# و طراح و برنامهنویس آن محفوظ است.
#
# ============================================================
# باز کردن فایل برای خواندن
file = open("result.txt", "r")
# خواندن اطلاعات فایل
data = file.read()
# نمایش اطلاعات
print(data)
# بستن فایل
file.close()
برنامه چه کاری انجام میدهد؟
در درس قبل فایل result.txt را ساختیم و مثلاً اطلاعات زیر را داخل آن قرار دادیم:
First number: 25
Second number: 17
Result: 42
حالا این برنامه فایل را باز میکند و اطلاعات آن را میخواند.
نتیجه روی صفحه:
First number: 25
Second number: 17
Result: 42
۱. دستور open()
file = open("result.txt", "r")
فایل را باز میکنیم.
در اینجا "r" یعنی:
read
یعنی خواندن.
در درس قبل داشتیم:
open("result.txt", "w")
که "w" به معنی:
write
یعنی نوشتن بود.
پس:
"w" → نوشتن
"r" → خواندن
۲. دستور read()
data = file.read()
این دستور تمام محتوای فایل را میخواند.
اطلاعات خواندهشده داخل متغیر:
data
قرار میگیرد.
یعنی:
فایل
↓
read()
↓
data
۳. نمایش اطلاعات
print(data)
حالا محتوایی که در data قرار گرفته است روی صفحه نمایش داده میشود.
۴. بستن فایل
در پایان:
file.close()
فایل را میبندیم.
بنابراین روند کامل برنامه این است:
result.txt
↓
open(..., "r")
↓
read()
↓
data
↓
print()
↓
نمایش اطلاعات
↓
close()
تفاوت درس ۱۳ و ۱۴
درس ۱۳
ذخیره اطلاعات
برنامه
↓
write()
↓
result.txt
درس ۱۴
فراخوانی اطلاعات
result.txt
↓
read()
↓
برنامه
↓
print()
بنابراین دانشآموز اکنون یک چرخه ساده را یاد گرفته است:
تولید اطلاعات → ذخیره → فراخوانی → نمایش
این یکی از پایههای مهم کار با دادهها در پایتون است.
درس ۱۵ پایتون
ذخیره و فراخوانی اطلاعات ۱۰ دانشآموز
پروژه: Students Database
در این پروژه میخواهیم اطلاعات ۱۰ دانشآموز و نمره آنها را:
- در یک
Listقرار دهیم. - در یک فایل متنی ذخیره کنیم.
- فایل را دوباره باز کنیم.
- اطلاعات ذخیرهشده را بخوانیم.
- اطلاعات را روی صفحه نمایش دهیم.
کد برنامه
# ============================================================
# فیبیست | PHY20
# آموزش برنامهنویسی پایتون
# ============================================================
#
# وبسایت:
# https://www.phy20.com
#
# طراح و برنامهنویس:
# مرتضی محمدیوند خوشخو
#
# تاریخ:
# ..............................
#
# مجوز و لایسنس کد:
# استفاده از این کد برای مقاصد آموزشی و
# بدون مقاصد تجاری رایگان است.
#
# مالکیت معنوی:
# تمامی حقوق معنوی این کد متعلق به فیبیست (PHY20)
# و طراح و برنامهنویس آن محفوظ است.
#
# ============================================================
# -------------------------
# PROJECT: Students Database
# -------------------------
students = [
["Sarina", 19],
["Ali", 17],
["Sara", 18],
["Reza", 15],
["Mina", 20],
["Nima", 16],
["Maryam", 19],
["Amir", 14],
["Nazi", 18],
["Arman", 17]
]
# -------------------------
# Save information
# -------------------------
file = open("students.txt", "w")
for student in students:
file.write(
student[0]
+ " : "
+ str(student[1])
+ "n"
)
file.close()
print("Student information saved.")
# -------------------------
# Read information
# -------------------------
file = open("students.txt", "r")
data = file.read()
print("nSaved Student Information:")
print(data)
file.close()
بخش اول: ساخت فهرست دانشآموزان
students = [
["Sarina", 19],
["Ali", 17],
["Sara", 18]
]
اینجا یک List داریم که اطلاعات دانشآموزان را نگهداری میکند.
هر دانشآموز خودش یک List کوچکتر است:
["Sarina", 19]
عضو اول:
student[0]
نام دانشآموز است.
عضو دوم:
student[1]
نمره دانشآموز است.
بخش دوم: باز کردن فایل برای نوشتن
file = open("students.txt", "w")
فایلی با نام:
students.txt
برای نوشتن باز میشود.
حرف "w" یعنی:
write
یعنی نوشتن در فایل.
بخش سوم: حرکت روی لیست
for student in students:
یعنی:
یکییکی دانشآموزان موجود در students را بررسی کن.
مثلاً در اولین مرحله:
student = ["Sarina", 19]
در مرحله بعد:
student = ["Ali", 17]
و همینطور تا دانشآموز دهم.
بخش چهارم: ذخیره اطلاعات
file.write(
student[0]
+ " : "
+ str(student[1])
+ "n"
)
مثلاً برای سارینا:
Sarina : 19
در فایل نوشته میشود.
str() نمره را از عدد به متن تبدیل میکند.
و:
"n"
یعنی رفتن به خط بعد.
بنابراین فایل تقریباً اینگونه خواهد بود:
Sarina : 19
Ali : 17
Sara : 18
Reza : 15
Mina : 20
Nima : 16
Maryam : 19
Amir : 14
Nazi : 18
Arman : 17
بخش پنجم: بستن فایل
file.close()
بعد از پایان نوشتن، فایل را میبندیم.
فراخوانی اطلاعات
حالا قسمت دوم برنامه شروع میشود.
file = open("students.txt", "r")
این بار فایل را با "r" باز میکنیم.
r یعنی:
read
یعنی خواندن.
خواندن کل فایل
data = file.read()
دستور read() تمام اطلاعات داخل فایل را میخواند.
اطلاعات خواندهشده داخل متغیر data قرار میگیرد.
نمایش اطلاعات
print(data)
حالا اطلاعاتی که از حافظه خواندهایم، روی صفحه نمایش داده میشود.
مسیر کامل اطلاعات
در این پروژه برای اولین بار یک چرخه کامل داده را میبینیم:
LIST
↓
اطلاعات دانشآموزان
↓
write()
↓
students.txt
↓
read()
↓
data
↓
print()
↓
نمایش اطلاعات
یعنی:
داده تولید شد → ذخیره شد → دوباره فراخوانی شد → نمایش داده شد
این مفهوم، پایه بسیاری از برنامههای بزرگتر است.
در پروژههای بعدی میتوانیم همین ایده را گسترش دهیم؛ مثلاً نمرات را از کاربر دریافت کنیم، در فایل ذخیره کنیم و بعد میانگین، بیشترین و کمترین نمره را از اطلاعات ذخیرهشده محاسبه کنیم.
درس ۱۶ پایتون
فراخوانی لیست نمرات از فایل
پروژه: خواندن نمرات ذخیرهشده و ساخت دوباره یک List
در پروژه قبل، اطلاعات ۱۰ دانشآموز را در فایل:
students.txt
ذخیره کردیم.
فایل ما چیزی شبیه این بود:
Sarina : 19
Ali : 17
Sara : 18
Reza : 15
Mina : 20
Nima : 16
Maryam : 19
Amir : 14
Nazi : 18
Arman : 17
در این درس میخواهیم فایل را بخوانیم و نمرات را دوباره از داخل فایل استخراج کنیم.
کد برنامه
# ============================================================
# فیبیست | PHY20
# آموزش برنامهنویسی پایتون
# ============================================================
#
# وبسایت:
# https://www.phy20.com
#
# طراح و برنامهنویس:
# مرتضی محمدیوند خوشخو
#
# تاریخ:
# ..............................
#
# مجوز و لایسنس کد:
# استفاده از این کد برای مقاصد آموزشی و
# بدون مقاصد تجاری رایگان است.
#
# مالکیت معنوی:
# تمامی حقوق معنوی این کد متعلق به فیبیست (PHY20)
# و طراح و برنامهنویس آن محفوظ است.
#
# ============================================================
# باز کردن فایل برای خواندن
file = open("students.txt", "r")
# خواندن خطوط فایل
lines = file.readlines()
# بستن فایل
file.close()
# ساخت لیست نمرات
grades = []
for line in lines:
name, grade = line.strip().split(" : ")
grades.append(int(grade))
# نمایش لیست نمرات
print("Student Grades:")
print(grades)
۱. خواندن فایل
در پروژه قبلی از:
file.read()
استفاده کردیم.
اما اینجا از:
file.readlines()
استفاده میکنیم.
تفاوت مهم این است که read() کل فایل را به صورت یک متن میخواند، ولی readlines() خطوط فایل را جداگانه در یک List قرار میدهد.
بنابراین تقریباً داریم:
lines =
[
"Sarina : 19n",
"Ali : 17n",
"Sara : 18n",
...
]
۲. ساخت لیست خالی
grades = []
در ابتدا هیچ نمرهای نداریم.
بعد قرار است نمرهها را یکییکی به این List اضافه کنیم.
۳. خواندن خطبهخط
for line in lines:
یعنی:
هر خط فایل را یکییکی بررسی کن.
مثلاً اولین خط:
Sarina : 19
و خط بعد:
Ali : 17
و همینطور تا آخر.
۴. حذف Enter آخر خط
line.strip()
ممکن است انتهای هر خط علامت رفتن به خط بعد یعنی:
n
وجود داشته باشد.
strip() آن را حذف میکند.
۵. جدا کردن نام و نمره
این قسمت بسیار جالب است:
name, grade = line.strip().split(" : ")
فرض کنیم:
Sarina : 19
باشد.
دستور:
split(" : ")
آن را به دو قسمت تقسیم میکند:
Sarina
19
بنابراین:
name
میشود:
Sarina
و:
grade
میشود:
19
۶. تبدیل نمره به عدد
اطلاعاتی که از فایل میخوانیم متن هستند.
بنابراین:
grade
در ابتدا "19" است، نه عدد 19.
برای تبدیل آن به عدد مینویسیم:
int(grade)
۷. اضافه کردن نمره به List
grades.append(int(grade))
یعنی نمره را به List به نام grades اضافه کن.
در پایان:
grades =
[19, 17, 18, 15, 20, 16, 19, 14, 18, 17]
خواهیم داشت.
نکته مهم درس
در درس قبلی:
List
↓
write()
↓
File
داشتیم.
اما اکنون مسیر برعکس شده است:
File
↓
readlines()
↓
split()
↓
int()
↓
append()
↓
List
یعنی توانستیم اطلاعاتی را که قبلاً روی حافظه ذخیره کرده بودیم، دوباره به داده قابل پردازش در پایتون تبدیل کنیم.
از اینجا به بعد میتوانیم روی این List عملیات مختلف انجام دهیم؛ مثلاً:
print(sum(grades))
یا:
print(max(grades))
یا:
print(min(grades))
و حتی میانگین نمرات را محاسبه کنیم.
این یعنی فایل دیگر فقط محلی برای نگهداری متن نیست؛ فایل به منبع داده برای برنامه تبدیل شده است.
درس ۱۷ پایتون
بهکار بردن دستور JSON برای ذخیرهسازی اطلاعات
در درسهای قبل، اطلاعات را به صورت متن داخل فایل ذخیره کردیم.
در این درس میخواهیم اطلاعات را به صورت ساختاریافته و با استفاده از JSON ذخیره کنیم.
JSON برای نگهداری اطلاعاتی مانند عدد، متن، لیست و مشخصات افراد بسیار کاربردی است.
برنامه: ذخیره حاصل جمع دو عدد با JSON
# ============================================================
# فیبیست | PHY20
# آموزش برنامهنویسی پایتون
# ============================================================
#
# وبسایت:
# https://www.phy20.com
#
# طراح و برنامهنویس:
# مرتضی محمدیوند خوشخو
#
# تاریخ:
# ..............................
#
# مجوز و لایسنس کد:
# استفاده از این کد برای مقاصد آموزشی و
# بدون مقاصد تجاری رایگان است.
#
# مالکیت معنوی:
# تمامی حقوق معنوی این کد متعلق به فیبیست (PHY20)
# و طراح و برنامهنویس آن محفوظ است.
#
# ============================================================
import json
number1 = int(input("Enter the first number: "))
number2 = int(input("Enter the second number: "))
result = number1 + number2
data = {
"number1": number1,
"number2": number2,
"result": result
}
# Save information
file = open("sum.json", "w")
json.dump(data, file, indent=4)
file.close()
print("Information saved successfully.")
۱. وارد کردن JSON
import json
با این دستور، کتابخانهٔ json را وارد برنامه میکنیم.
json یکی از کتابخانههای داخلی پایتون است و برای تبدیل و ذخیرهسازی اطلاعات در قالب JSON استفاده میشود.
۲. دریافت دو عدد
number1 = int(input("Enter the first number: "))
number2 = int(input("Enter the second number: "))
کاربر دو عدد وارد میکند.
مثلاً:
Enter the first number: 12
Enter the second number: 8
پایتون این دو مقدار را دریافت میکند و چون از int() استفاده کردهایم، آنها را به عدد صحیح تبدیل میکند.
۳. محاسبه حاصل جمع
result = number1 + number2
اگر:
number1 = 12
number2 = 8
باشد:
result = 20
۴. ساختن یک Dictionary
data = {
"number1": number1,
"number2": number2,
"result": result
}
اینجا اطلاعات را داخل یک دیکشنری (Dictionary) قرار میدهیم.
در واقع سه اطلاعات داریم:
number1 → 12
number2 → 8
result → 20
یعنی هر اطلاعات یک نام (Key) و یک مقدار (Value) دارد.
۵. ساخت فایل JSON
file = open("sum.json", "w")
فایلی به نام:
sum.json
ایجاد میشود.
حرف "w" یعنی:
Write
یعنی فایل را برای نوشتن باز کن.
۶. ذخیره اطلاعات با JSON
مهمترین دستور این درس:
json.dump(data, file, indent=4)
اینجا dump() اطلاعات موجود در data را داخل فایل ذخیره میکند.
به زبان ساده:
data
↓
json.dump()
↓
sum.json
۷. indent=4 چیست؟
در این قسمت:
indent=4
به JSON میگوییم اطلاعات را با فاصلهگذاری مرتب ذخیره کند.
مثلاً فایل sum.json به شکل زیر خواهد بود:
{
"number1": 12,
"number2": 8,
"result": 20
}
اگر indent=4 را حذف کنیم، ممکن است اطلاعات به صورت فشرده ذخیره شوند:
{"number1": 12, "number2": 8, "result": 20}
هر دو حالت درست هستند، اما حالت اول برای انسان خواناتر است.
۸. بستن فایل
file.close()
پس از پایان کار، فایل را میبندیم.
بنابراین روند کلی ذخیرهسازی این است:
باز کردن فایل
↓
نوشتن اطلاعات
↓
بستن فایل
فایل نهایی
بعد از اجرای برنامه، فایلی به نام:
sum.json
در همان پوشهای که برنامهٔ پایتون قرار دارد ساخته میشود.
محتوای آن مثلاً:
{
"number1": 12,
"number2": 8,
"result": 20
}
خواهد بود.
نکته مهم
در درسهای قبلی داشتیم:
file.write(...)
یعنی اطلاعات را مستقیماً به صورت متن داخل فایل مینوشتیم.
اما اکنون داریم:
json.dump(data, file)
یعنی یک ساختار دادهٔ پایتونی را به قالب JSON تبدیل و در فایل ذخیره میکنیم.
پس مسیر آموزشی ما اینگونه شده است:
اطلاعات
↓
متغیر
↓
Dictionary
↓
JSON
↓
فایل
و این موضوع پایهٔ بسیار مهمی برای درسهای بعدی است؛ زیرا میتوانیم اطلاعات را ذخیره کنیم و بعداً دوباره آنها را از فایل JSON فراخوانی کنیم.
درس ۱۸ پایتون
فراخوانی اطلاعات از فایل JSON
در درس ۱۷، اطلاعات دو عدد و حاصل جمع آنها را در فایل sum.json ذخیره کردیم.
در این درس میخواهیم همان اطلاعات را دوباره از فایل فراخوانی کنیم.
برنامه
# ============================================================
# فیبیست | PHY20
# آموزش برنامهنویسی پایتون
# ============================================================
#
# وبسایت:
# https://www.phy20.com
#
# طراح و برنامهنویس:
# مرتضی محمدیوند خوشخو
#
# تاریخ:
# ..............................
#
# مجوز و لایسنس کد:
# استفاده از این کد برای مقاصد آموزشی و
# بدون مقاصد تجاری رایگان است.
#
# مالکیت معنوی:
# تمامی حقوق معنوی این کد متعلق به فیبیست (PHY20)
# و طراح و برنامهنویس آن محفوظ است.
#
# ============================================================
import json
file = open("sum.json", "r")
data = json.load(file)
file.close()
print("First number:", data["number1"])
print("Second number:", data["number2"])
print("Result:", data["result"])
۱. وارد کردن JSON
import json
کتابخانهٔ json را وارد میکنیم تا بتوانیم اطلاعات JSON را از فایل بخوانیم.
۲. باز کردن فایل
file = open("sum.json", "r")
فایل sum.json را باز میکنیم.
حرف "r" یعنی:
Read
یعنی خواندن اطلاعات.
در درس ۱۷ داشتیم:
open("sum.json", "w")
و حالا داریم:
open("sum.json", "r")
پس:
"w" → Write → نوشتن
"r" → Read → خواندن
۳. خواندن اطلاعات JSON
مهمترین دستور این درس:
data = json.load(file)
دستور json.load() اطلاعات موجود در فایل JSON را میخواند و آن را دوباره به یک ساختار دادهٔ پایتون تبدیل میکند.
یعنی در درس ۱۷:
Dictionary پایتون
↓
json.dump()
↓
فایل JSON
و در درس ۱۸:
فایل JSON
↓
json.load()
↓
Dictionary پایتون
این دو دستور را بهتر است در کنار هم به خاطر بسپاریم:
json.dump()
ذخیره کردن
و:
json.load()
فراخوانی کردن
۴. بستن فایل
file.close()
بعد از خواندن اطلاعات، فایل را میبندیم.
۵. دسترسی به اطلاعات
فرض کنیم فایل sum.json این اطلاعات را دارد:
{
"number1": 12,
"number2": 8,
"result": 20
}
بعد از اجرای:
data = json.load(file)
متغیر data تقریباً چنین ساختاری خواهد داشت:
data = {
"number1": 12,
"number2": 8,
"result": 20
}
حالا میتوانیم هر مقدار را با کلید آن فراخوانی کنیم.
عدد اول
data["number1"]
نتیجه:
12
عدد دوم
data["number2"]
نتیجه:
8
حاصل جمع
data["result"]
نتیجه:
20
۶. نمایش اطلاعات
print("First number:", data["number1"])
print("Second number:", data["number2"])
print("Result:", data["result"])
خروجی:
First number: 12
Second number: 8
Result: 20
مسیر کامل اطلاعات
حالا دو درس ۱۷ و ۱۸ را کنار هم ببینیم:
درس ۱۷ — ذخیره
دادههای پایتون
↓
Dictionary
↓
json.dump()
↓
sum.json
درس ۱۸ — فراخوانی
sum.json
↓
json.load()
↓
Dictionary
↓
data["result"]
بنابراین میتوانیم بگوییم:
JSON پلی است بین برنامهٔ پایتون و فایل ذخیرهشده روی حافظه.
این مفهوم در پروژههای بزرگتر بسیار مهم میشود؛ چون میتوانیم اطلاعات را ذخیره کنیم، برنامه را ببندیم و بعداً دوباره همان اطلاعات را از فایل فراخوانی کنیم.
در TXT بیشتر با متن سروکار داریم.
اما JSON ساختار اطلاعات را هم حفظ میکند.
درس ۱۹ پایتون
ذخیره کردن اطلاعات در مسیر مشخص تلفن همراه و ویندوز
تا اینجا فایلهای خود را با نام فایل ایجاد میکردیم:
file = open("result.txt", "w")
در این حالت، پایتون فایل را در پوشهٔ جاری برنامه ذخیره میکند.
اما اگر بخواهیم فایل را در یک محل مشخص، مثلاً پوشهٔ Download تلفن همراه یا ویندوز ذخیره کنیم، باید مسیر کامل فایل را به پایتون بدهیم.
بخش اول — ذخیره فایل در تلفن همراه
در اندروید، یکی از مسیرهای معمول برای پوشهٔ Download این است:
/storage/emulated/0/Download/
بنابراین میتوانیم بنویسیم:
# ============================================================
# فیبیست | PHY20
# آموزش برنامهنویسی پایتون
# ============================================================
#
# وبسایت:
# https://www.phy20.com
#
# طراح و برنامهنویس:
# مرتضی محمدیوند خوشخو
#
# تاریخ:
# ..............................
#
# مجوز و لایسنس کد:
# استفاده از این کد برای مقاصد آموزشی و
# بدون مقاصد تجاری رایگان است.
#
# مالکیت معنوی:
# تمامی حقوق معنوی این کد متعلق به فیبیست (PHY20)
# و طراح و برنامهنویس آن محفوظ است.
#
# ============================================================
file = open("/storage/emulated/0/Download/result.txt", "w")
file.write("Hello Sarina!n")
file.write("Python saved this file in the phone.")
file.close()
print("File saved in Download.")
بعد از اجرای برنامه، فایل:
result.txt
در پوشهٔ:
Download
تلفن ذخیره میشود.
محتوای فایل:
Hello Sarina!
Python saved this file in the phone.
خواهد بود.
بخش دوم — مسیر فایل یعنی چه؟
به این قسمت توجه کنید:
"/storage/emulated/0/Download/result.txt"
این یک مسیر فایل است.
مسیر به پایتون میگوید:
فایل را دقیقاً کجا ایجاد کن؟
میتوانیم آن را به چند قسمت تقسیم کنیم:
/storage/emulated/0/
↓
حافظه اصلی تلفن
Download/
↓
پوشه دانلود
result.txt
↓
نام فایل
پس:
مسیر پوشه + نام فایل = مسیر کامل فایل
بخش سوم — ذخیره فایل در ویندوز
در ویندوز، مسیرها شکل دیگری دارند.
مثلاً اگر بخواهیم فایل را در پوشهٔ Download کاربر ذخیره کنیم:
file = open(r"C:UsersMORTEZADownloadsresult.txt", "w")
file.write("Hello Sarina!n")
file.write("Python saved this file in Windows.")
file.close()
print("File saved in Downloads.")
در اینجا:
C:
↓
Users
↓
MORTEZA
↓
Downloads
↓
result.txt
مسیر کامل فایل است:
C:UsersMORTEZADownloadsresult.txt
چرا قبل از مسیر حرف r گذاشتیم؟
در ویندوز بهتر است برای مسیرهای دارای از r استفاده کنیم:
r"C:UsersMORTEZADownloadsresult.txt"
حرف r یعنی Raw String.
این کار باعث میشود پایتون مسیر را همانطور که نوشتهایم، راحتتر تفسیر کند.
مثلاً:
r"C:UsersMORTEZADownloadsresult.txt"
مقایسهٔ تلفن و ویندوز
تلفن همراه
file = open(
"/storage/emulated/0/Download/result.txt",
"w"
)
ویندوز
file = open(
r"C:UsersMORTEZADownloadsresult.txt",
"w"
)
دستور اصلی در هر دو یکی است:
open(path, "w")
فقط مسیر فایل متفاوت است.
یک مفهوم مهم
تا قبل از این درس مینوشتیم:
file = open("result.txt", "w")
یعنی:
فایل
result.txtرا در پوشهٔ جاری برنامه ذخیره کن.
اما اکنون میتوانیم بنویسیم:
file = open(
r"C:UsersMORTEZADownloadsresult.txt",
"w"
)
یعنی:
فایل را دقیقاً در پوشهٔ Downloads ذخیره کن.
پس یک مهارت جدید یاد گرفتیم:
نام فایل
↓
مسیر نسبی
مسیر کامل + نام فایل
↓
مسیر مشخص
تمرین
فایل زیر را در پوشهٔ Downloads ویندوز ذخیره کنید:
python_lesson19.txt
محتوای فایل باید این باشد:
Python
PHY20
Lesson 19
File Path
مسیر را خودتان در برنامه مشخص کنید.
هدف این تمرین این است که یاد بگیریم:
پایتون فقط اطلاعات را ذخیره نمیکند؛ ما میتوانیم محل ذخیره شدن اطلاعات را نیز تعیین کنیم.
درس ۲۰ پایتون
مسیردهی با pathlib
در درسهای قبل برای ذخیره کردن فایل، مسیر آن را مستقیماً داخل open() مینوشتیم.
مثلاً:
file = open(
r"C:UsersMORTEZADownloadsresult.txt",
"w"
)
اما پایتون ابزار قدرتمندتری برای کار با مسیر فایلها دارد:
pathlib
با pathlib میتوانیم مسیر فایلها و پوشهها را به شکل منظمتر و خواناتر مدیریت کنیم.
۱. وارد کردن pathlib
from pathlib import Path
کلاس Path را از کتابخانهٔ pathlib وارد میکنیم.
حالا میتوانیم یک مسیر بسازیم:
path = Path(r"C:UsersMORTEZADownloads")
در اینجا path نمایندهٔ پوشهٔ Downloads است.
۲. دیدن مسیر
میتوانیم مسیر را نمایش دهیم:
print(path)
خروجی:
C:UsersMORTEZADownloads
۳. اضافه کردن نام فایل به مسیر
یکی از ویژگیهای مهم pathlib استفاده از / برای ساختن مسیر است.
مثلاً:
file_path = path / "result.txt"
حالا مسیر کامل فایل ساخته میشود:
C:UsersMORTEZADownloadsresult.txt
یعنی:
پوشه
+
نام فایل
↓
مسیر کامل فایل
۴. برنامه کامل
# ============================================================
# فیبیست | PHY20
# آموزش برنامهنویسی پایتون
# ============================================================
#
# وبسایت:
# https://www.phy20.com
#
# طراح و برنامهنویس:
# مرتضی محمدیوند خوشخو
#
# تاریخ:
# ..............................
#
# مجوز و لایسنس کد:
# استفاده از این کد برای مقاصد آموزشی و
# بدون مقاصد تجاری رایگان است.
#
# مالکیت معنوی:
# تمامی حقوق معنوی این کد متعلق به فیبیست (PHY20)
# و طراح و برنامهنویس آن محفوظ است.
#
# ============================================================
from pathlib import Path
folder = Path(r"C:UsersMORTEZADownloads")
file_path = folder / "result.txt"
print("Folder:")
print(folder)
print("nFile:")
print(file_path)
خروجی:
Folder:
C:UsersMORTEZADownloads
File:
C:UsersMORTEZADownloadsresult.txt
۵. چرا از / استفاده میکنیم؟
ممکن است در ابتدا عجیب باشد که در ویندوز مینویسیم:
file_path = folder / "result.txt"
اما این یکی از ویژگیهای pathlib است.
pathlib خودش میداند چگونه قسمتهای مسیر را به یکدیگر متصل کند.
بنابراین به جای اینکه خودمان بنویسیم:
r"C:UsersMORTEZADownloadsresult.txt"
میتوانیم مسیر را مرحلهبهمرحله بسازیم:
folder = Path(r"C:UsersMORTEZADownloads")
file_path = folder / "result.txt"
این روش برای برنامههای بزرگتر بسیار مناسبتر است.
۶. ساخت مسیر چند پوشهای
فرض کنیم میخواهیم فایل را داخل پوشهای به نام PHY20 و سپس Python قرار دهیم.
میتوانیم بنویسیم:
folder = Path(r"C:UsersMORTEZADownloads")
file_path = folder / "PHY20" / "Python" / "lesson20.txt"
print(file_path)
مسیر ساختهشده:
C:UsersMORTEZADownloadsPHY20Pythonlesson20.txt
یعنی:
Downloads
↓
PHY20
↓
Python
↓
lesson20.txt
۷. بررسی وجود مسیر
با exists() میتوانیم بررسی کنیم که یک مسیر وجود دارد یا نه:
path = Path(r"C:UsersMORTEZADownloads")
print(path.exists())
اگر پوشه وجود داشته باشد:
True
و اگر وجود نداشته باشد:
False
۸. تشخیص فایل و پوشه
pathlib میتواند تشخیص دهد که یک مسیر مربوط به فایل است یا پوشه.
برای پوشه:
path.is_dir()
برای فایل:
path.is_file()
مثلاً:
from pathlib import Path
path = Path(r"C:UsersMORTEZADownloads")
print("Exists:", path.exists())
print("Is folder:", path.is_dir())
print("Is file:", path.is_file())
خروجی احتمالی:
Exists: True
Is folder: True
Is file: False
۹. مسیر فایل در تلفن همراه
همین مفهوم را میتوانیم در اندروید نیز استفاده کنیم:
from pathlib import Path
folder = Path("/storage/emulated/0/Download")
file_path = folder / "result.txt"
print(file_path)
خروجی:
/storage/emulated/0/Download/result.txt
پس مفهوم اصلی pathlib وابسته به نام فایل نیست؛ ما ابتدا مسیر را میسازیم و سپس فایل یا پوشه را به آن اضافه میکنیم.
جمعبندی
در این درس یاد گرفتیم:
from pathlib import Path
ساخت یک مسیر:
folder = Path(r"C:UsersMORTEZADownloads")
اضافه کردن فایل:
file_path = folder / "result.txt"
بررسی وجود مسیر:
path.exists()
تشخیص پوشه:
path.is_dir()
تشخیص فایل:
path.is_file()
و ساخت مسیرهای چندمرحلهای:
file_path = folder / "PHY20" / "Python" / "lesson20.txt"
مسیر فکری درس
Path
↓
پوشه
↓
اضافه کردن پوشه
↓
اضافه کردن فایل
↓
مسیر کامل
در واقع pathlib به ما یاد میدهد که مسیر فایل را مثل یک شیء قابل مدیریت در پایتون ببینیم، نه فقط یک رشتهٔ متنی.
درس ۲۱ پایتون
ساختن پایگاه داده با SQLite3
تا اینجا اطلاعات را در فایلهای مختلف ذخیره کردیم:
TXT
↓
JSON
↓
Pathlib
اکنون میخواهیم با یک روش حرفهایتر آشنا شویم:
Database
پایتون یک ابزار داخلی به نام:
sqlite3
دارد که به ما اجازه میدهد یک پایگاه دادهٔ کوچک و قابل استفاده بسازیم.
SQLite چیست؟
SQLite یک پایگاه دادهٔ سبک است.
برخلاف بعضی پایگاههای داده، برای شروع کار با SQLite نیازی به نصب یک برنامهٔ جداگانه نداریم؛ پایتون کتابخانهٔ sqlite3 را در اختیار ما قرار میدهد.
اطلاعات SQLite در یک فایل ذخیره میشوند.
مثلاً:
students.db
۱. وارد کردن sqlite3
ابتدا مینویسیم:
import sqlite3
با این دستور ابزار SQLite را وارد برنامه میکنیم.
۲. ساخت یا باز کردن پایگاه داده
connection = sqlite3.connect("students.db")
این دستور بسیار مهم است.
اگر فایل:
students.db
وجود نداشته باشد، SQLite آن را ایجاد میکند.
اگر فایل از قبل وجود داشته باشد، همان پایگاه داده را باز میکند.
پس:
students.db وجود ندارد
↓
ساخته میشود
students.db وجود دارد
↓
باز میشود
۳. ساخت Cursor
بعد از اتصال به پایگاه داده، یک cursor ایجاد میکنیم:
cursor = connection.cursor()
cursor وسیلهای است که از طریق آن دستورات SQL را به پایگاه داده میفرستیم.
به زبان ساده:
Python
↓
cursor
↓
SQLite Database
۴. ساخت جدول
حالا میخواهیم جدولی برای دانشآموزان ایجاد کنیم.
cursor.execute("""
CREATE TABLE IF NOT EXISTS students (
name TEXT,
grade INTEGER
)
""")
اینجا یک جدول به نام:
students
میسازیم.
این جدول دو ستون دارد:
name
grade
نوع اطلاعات هم مشخص شده است:
name → TEXT
grade → INTEGER
۵. کاملترین برنامهٔ این درس
# ============================================================
# فیبیست | PHY20
# آموزش برنامهنویسی پایتون
# ============================================================
#
# وبسایت:
# https://www.phy20.com
#
# طراح و برنامهنویس:
# مرتضی محمدیوند خوشخو
#
# تاریخ:
# ..............................
#
# مجوز و لایسنس کد:
# استفاده از این کد برای مقاصد آموزشی و
# بدون مقاصد تجاری رایگان است.
#
# مالکیت معنوی:
# تمامی حقوق معنوی این کد متعلق به فیبیست (PHY20)
# و طراح و برنامهنویس آن محفوظ است.
#
# ============================================================
import sqlite3
# Connect to database
connection = sqlite3.connect("students.db")
# Create cursor
cursor = connection.cursor()
# Create table
cursor.execute("""
CREATE TABLE IF NOT EXISTS students (
name TEXT,
grade INTEGER
)
""")
# Save changes
connection.commit()
# Close database
connection.close()
print("Database created successfully.")
۶. نتیجهٔ اجرای برنامه
بعد از اجرای برنامه، در پوشهٔ برنامه یک فایل ایجاد میشود:
students.db
این فایل پایگاه دادهٔ ماست.
در داخل آن یک جدول به نام:
students
داریم.
ساختار جدول:
students
----------------
name
grade
۷. دستور مهم commit()
در برنامه داریم:
connection.commit()
commit() به SQLite میگوید:
تغییراتی را که انجام دادهایم، در پایگاه داده ذخیره کن.
پس:
execute()
↓
اجرای دستور
↓
commit()
↓
ذخیره تغییرات
۸. بستن پایگاه داده
در پایان:
connection.close()
ارتباط برنامه با پایگاه داده بسته میشود.
بنابراین ساختار کلی کار با SQLite فعلاً این است:
import sqlite3
↓
connect()
↓
cursor()
↓
execute()
↓
commit()
↓
close()
این شش مرحله را در درسهای بعدی بارها استفاده خواهیم کرد.
یک نگاه به آینده
در این درس فقط پایگاه داده و جدول را ساختیم.
در درسهای بعدی میتوانیم:
INSERT
↓
افزودن دانشآموز
SELECT
↓
فراخوانی دانشآموز
UPDATE
↓
تغییر اطلاعات
DELETE
↓
حذف اطلاعات
را یاد بگیریم.
مثلاً در نهایت میتوانیم همان اطلاعات درسهای قبلی را به جای فایل متنی یا JSON، داخل یک پایگاه داده ذخیره کنیم:
Sarina 19
Ali 17
Sara 18
Reza 15
...
و بعد از پایگاه داده دوباره آنها را فراخوانی کنیم.
مسیر آموزشی ما
فایل TXT
↓
JSON
↓
Pathlib
↓
SQLite3
↓
Database
اینجا دیگر از «ذخیره کردن یک فایل» وارد دنیای مدیریت اطلاعات میشویم.

