🗂 فصل ۱۳: کار با فایلها و مدیریت داده در پایتون (File I/O)

۱۳.۱ نوشتن و خواندن فایل متنی (.txt)
چرا کار با فایل مهم است؟
خیلی از برنامهها باید اطلاعات رو ذخیرهسازی یا بازیابی کنن (مثلاً دفترچه یادداشت، مدیریت سفارشات، پردازش گزارشها و …). این اطلاعات معمولاً در فایلهایی مثل txt، csv یا json نگهداری میشن.
نحوه نوشتن در فایل
کد زیر یک فایل متنی جدید به اسم hello.txt باز (یا اگر وجود داشت، پاک و جدید میکنه) و محتوای دلخواه رو داخلش مینویسه:
with open("hello.txt", "w", encoding="utf-8") as f:
f.write("سلام پایتون!\nاین یک خط جدید است.")
- اگر به جای
"w"از"a"استفاده کنی، به انتهای فایل اضافه میکنه و چیزی پاک نمیشه. - چرا از with استفاده میکنیم؟ چون مطمئن میشه فایل بعد از اتمام کار به درستی بسته میشه و هیچ چیز تو حافظه برنامه باقی نمیمونه.
نحوه خواندن فایل
وقتی میخوای فایل رو بخونی (نمونه مثلاً برای نمایش یا پردازش اطلاعات):
with open("hello.txt", "r", encoding="utf-8") as f:
lines = f.readlines()
for line in lines:
print(line.strip()) # .strip() برای حذف فاصله و رفتن به خط جدید
- هر سطر فایل میره تو یه عنصر لیست
lines. - اسم رمز موفقیت تو مدیریت فایلها: همیشه encoding رو تنظیم کن (utf-8 برای فارسی عالیه).
۱۳.۲ کار با فایلهای CSV و JSON
چرا CSV و JSON؟
- CSV برای ذخیره دادههای جدولی (مثلاً اکسل، لیست دانشآموزان).
- JSON فرمت محبوب برای کار با دادههای ساختیافته و رد و بدل بین برنامهها (APIها، ذخیره تنظیمات و …).
نوشتن اطلاعات در CSV
import csv
with open("data.csv", "w", newline='', encoding="utf-8") as csvfile:
writer = csv.writer(csvfile)
writer.writerow(["نام", "سن"])
writer.writerow(["مینا", 22])
writer.writerow(["علی", 30])
- ستونها با کاما جدا میشن و خودش مدیریت میشه، پس نگران جداکردن دستی نباش!
خواندن اطلاعات از CSV
with open("data.csv", "r", encoding="utf-8") as csvfile:
reader = csv.reader(csvfile)
for row in reader:
print(row)
- هر ردیف داده رو به صورت یک لیست میده.
نوشتن و خواندن فایل JSON
import json
داده = {"name": "سارا", "age": 27}
with open("person.json", "w", encoding="utf-8") as f:
json.dump(داده, f, ensure_ascii=False, indent=2) # ensure_ascii=False برای فارسی مهمه
with open("person.json", "r", encoding="utf-8") as f:
data = json.load(f)
print(data["name"])
- json.dump دادههای برنامه رو به شکل قابل ذخیره شدن تبدیل میکنه.
- json.load برای خوندن اون داده.
۱۳.۳ کار با مسیرها (os و pathlib)
چرا مدیریت مسیر مهم است؟
گاهی فایل یا پوشه در مکان دلخواه نیست یا باید وجود داشتن یا نداشتنش رو چک کنیم.
ماژول os: روش کلاسیک
import os
if os.path.exists("hello.txt"):
print("فایل موجود است!")
else:
print("فایل پیدا نشد.")
- برای ساخت پوشه جدید:
os.makedirs("my_folder", exist_ok=True)
- اگر پوشه وجود داشت، خطا نمیده!
ماژول pathlib: روش مدرن و ساده
from pathlib import Path
p = Path("hello.txt")
if p.exists():
print("فایل وجود داره!")
- حتی میتونی با p.is_file() یا p.is_dir() بررسی کنی که فایل هست یا پوشه.
۱۳.۴ نکات مهم و حرفهای
- همیشه با with فایل باز کن تا مشکلات بسته شدن فایل پیش نیاد.
- داخل کد، exception ها رو (مثلاً FileNotFoundError) حتماً بگیر. اگر نشد، پیام مناسبی به کاربر بده.
- همیشه مطمئن شو هنگام خواندن/نوشتن اطلاعات اکسس لازم (read/write) رو داری.
- اگر داده حساس یا مهم ذخیره میکنی، encrypt کن یا permission مناسب بذار.
۱۳.۵ تمرین عملی
«لیست اسامی و نمرات چند دانشآموز را بگیر، در یک فایل CSV ذخیره کن و سپس دادهها را مجدد از فایل خوانده و چاپ کن.»
نمونه راه حل ساده:
import csv
# ذخیره اطلاعات
students = [("مینا", 17), ("علی", 19), ("حامد", 15)]
with open("students.csv", "w", newline='', encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerow(["نام", "نمره"])
for s in students:
writer.writerow(s)
# خواندن داده از CSV
with open("students.csv", "r", encoding="utf-8") as f:
reader = csv.reader(f)
for row in reader:
print(row)
🟢 جمعبندی:
- کار با فایل توی هر اپلیکیشن یا ابزار مدیریتی لازم میشه.
- فایل متنی، CSV و JSON هر کدوم کاربرد خودشون رو دارن.
- مدیریت Exception و مسیر دسترسی رو فراموش نکن.