رفتن به محتوای اصلی
برنامه‌سازی پیشرفته با پایتون درس‌نامهٔ آزاد
درس متوسط ۲۵ دقیقه

فایل، ورودی/خروجی و سریال‌سازی

خواندن و نوشتن متن و باینری، pathlib، الگوهای زمینه‌بان، JSON و CSV و بار امن دادهٔ خارجی.

هدف این درس

بتوانی با pathlib و with فایل بخوانی و بنویسی و دادهٔ خارجی را امن سریال‌سازی کنی.

در این مطلب ۳

هر برنامهٔ واقعی با دنیای بیرون حرف می‌زند و بیشتر این حرف‌زدن «فایل» است: خواندن پیکربندی، نوشتن گزارش، ذخیرهٔ وضعیت.

متن در برابر باینری

فایل متنی را با انکدینگ (معمولاً UTF-8) می‌خوانیم و می‌نویسیم؛ فایل باینری (عکس، فشرده، مدل) را بایت‌به‌بایت. قاطی‌کردن این دو (مثل خواندن عکس در حالت متنی) داده را خراب می‌کند.

from pathlib import Path

# خواندن امن با زمینه‌بان: بسته‌شدن تضمینی حتی وسط خطا
path = Path("data/scores.txt")
lines = path.read_text(encoding="utf-8").splitlines()
scores = [float(line) for line in lines if line.strip()]

pathlib مسیر را شیء می‌کند: path.name، path.suffix، path.parent، path.exists(). دیگر جمع‌کردن رشته با / و دردسر ویندوز/لینوکس تمام.

الگوی پردازش خط‌به‌خط

def convert(input_path, output_path):
    src, dst = Path(input_path), Path(output_path)
    with src.open(encoding="utf-8") as fin, dst.open("w", encoding="utf-8") as fout:
        for lineno, line in enumerate(fin, start=1):
            line = line.strip()
            if not line or line.startswith("#"):
                continue  # سطر خالی و نظر را رد کن
            try:
                fout.write(f"{lineno}: {float(line):.1f}\n")
            except ValueError:
                print(f"سطر {lineno} نامعتبر است و رد شد.")

دو نکتهٔ حرفه‌ای: فایل بزرگ را یک‌جا read() نکن (حافظه!) و دو فایل را در یک with باز کن تا هر دو تضمینی بسته شوند.

JSON و CSV

import json, csv

# JSON: زبان تبادل ساختارهای تودرتو
config = {"host": "localhost", "port": 8000, "debug": True}
Path("config.json").write_text(json.dumps(config, ensure_ascii=False, indent=2), encoding="utf-8")
loaded = json.loads(Path("config.json").read_text(encoding="utf-8"))

# CSV: زبان جدول‌های ساده
with open("scores.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.DictWriter(f, fieldnames=["name", "score"])
    writer.writeheader()
    writer.writerows([{"name": "سارا", "score": 19}, {"name": "علی", "score": 17}])
تعریف سریال‌سازی

تبدیل ساختار حافظه‌ای (شیء، لیست، دیکشنری) به قالبی قابل ذخیره یا ارسال (بایت یا متن) و برگرداندن آن (deserialization). قرارداد قالب باید روشن و امن باشد.

سنجش فهم — فایل و سریال‌سازی

۰ از ۲ پاسخ داده شده

  1. فایل pickle رسیده از یک کاربر ناشناس را چه باید کرد؟
  2. چرا فایل را با with باز می‌کنیم؟

اول به همهٔ پرسش‌ها پاسخ دهید، بعد بررسی کنید.

مطالب مرتبط

از همین بخش و با برچسب‌های مشترک

این مطلب را خواندید؟ آن را علامت بزنید تا پیشرفت شما روی همین دستگاه ذخیره شود.

وضعیت پیشرفت برای فایل، ورودی/خروجی و سریال‌سازی