پث‌وایز

شروع برنامه‌نویسی با پایتون (Intro to Python) · درس ۱۱ از ۱۲ · ۱۲ دقیقه

ذخیره و خوندن فایل (Files)

متغیرها وقتی برنامه تموم می‌شه از بین می‌رن؛ فایل‌ها می‌مونن. یه فایل رو با with باز می‌کنی، توش خط می‌نویسی، بدون پاک کردنش بهش اضافه می‌کنی و خط‌به‌خط دوباره می‌خونیش.

OPEN و WITH و WRITE

یه فایل رو باز کن، توش بنویس، و بذار with ببندتش

with open("notes.txt", "w") as f: فایل notes.txt رو برای نوشتن باز می‌کنه و اسم فایل باز رو می‌ذاره f. داخل بلوک تورفته، f.write("milk\n") یه متن توش می‌نویسه. وقتی بلوک تموم می‌شه، with خودش فایل رو می‌بنده، حتی اگه وسطش خطایی پیش اومده باشه. دو تا نکته درباره‌ی write: خط جدید اضافه نمی‌کنه، پس \n (کاراکتر خط جدید) رو خودت آخرش می‌ذاری، و فقط رشته قبول می‌کنه، پس یه عدد رو باید با str(12) بدی.

فایل توی همون پوشه‌ای پیدا می‌شه که برنامه‌ت ازش اجرا می‌شه، مگر اینکه یه آدرس کامل بدی، مثل /home/reza/notes.txt.

with open("notes.txt", "w") as f:
    f.write("milk\n")
    f.write("eggs\n")

with open("notes.txt") as f:
    print(f.read())

خروجی

milk
eggs

f.read() کل فایل رو به‌صورت یه رشته می‌ده، "milk\neggs\n". اون خط خالی آخر خروجی واقعیه: فایل با \n تموم می‌شه، و print هم یکی از خودش اضافه می‌کنه. اگه حالتی ندی، open برای خوندن باز می‌کنه.

خودت رو امتحان کن

f.write("tea") خودش بعد از tea یه خط جدید اضافه می‌کنه، درست مثل print.

جواب رو ببین

نادرست

غلطه. write دقیقاً همون متنی رو که بهش می‌دی توی فایل می‌ذاره، نه بیشتر. اگه می‌خوای چیز بعدی از یه خط جدید شروع بشه، بنویس f.write("tea\n").

"w" پاک می‌کنه، "a" اضافه می‌کنه

"w" نوشتن

اگه فایل نباشه می‌سازدش. اگه از قبل باشه، اول هر چی توشه رو پاک می‌کنه، بعد می‌نویسه.

وقتی می‌خوای یه فایل رو از نو شروع کنی ازش استفاده کن.

"a" اضافه کردن (append)

اگه فایل نباشه می‌سازدش. اگه باشه، هر چی توشه رو نگه می‌داره و به آخرش اضافه می‌کنه.

برای گزارش‌ها، دفترچه‌ها و لیست‌هایی که بزرگ می‌شن ازش استفاده کن. حالت سوم، "r"، فقط می‌خونه و پیش‌فرضه.

خودت رو امتحان کن

notes.txt سه خط داره. مینا اون رو با open("notes.txt", "w") باز می‌کنه و یه خط می‌نویسه. حالا فایل چند خط داره؟

  1. 1
  2. 3
  3. 4
  4. 0، چون w نمی‌تونه توی فایلی که از قبل هست بنویسه
جواب رو ببین

1

درسته. "w" همون لحظه‌ی باز شدن فایل سه خط قدیمی رو پاک کرد، پس فقط خط جدید مونده.

قدم‌به‌قدم ببین

  1. open("w"): main.py، milk و eggs رو می‌نویسه

    یه فلش از برنامه، main.py، می‌ره توی notes.txt، با برچسب open("w"). حالت نوشتن فایل رو خالی شروع می‌کنه و هر چی بهش بدی رو می‌نویسه، پس حالا سند دو خط داره، milk و eggs، و نشانش عدد 2 رو نشون می‌ده.

  2. open("a"): tea به آخر اضافه می‌شه

    این بار برچسب فلش open("a")‌ـه و به زیر خط آخر اشاره می‌کنه. حالت اضافه کردن milk و eggs رو سر جاشون نگه می‌داره و tea رو به آخر اضافه می‌کنه، پس نشان می‌ره روی 3.

  3. open("r"): خط‌ها از strip() رد می‌شن و برمی‌گردن

    با open("r")، از هر کدوم از سه خط notes.txt یه فلش می‌ره توی دروازه‌ی strip()، که \n آخر هر خط رو می‌اندازه. چیزی که بیرون میاد لیست lines رو پر می‌کنه: ['milk', 'eggs', 'tea']. خوندن فایل رو عوض نمی‌کنه؛ نشان هنوز 3‌ـه.

  4. دوباره open("w"): فقط bread مونده

    برنامه یه بار دیگه notes.txt رو با "w" باز می‌کنه، که با نارنجیِ هشدار کشیده شده، و bread رو می‌نویسه. اول سه خط قبلی پاک می‌شن، پس فایل فقط bread رو داره، نشان می‌افته روی 1 و یه علامت هشدار روی سند می‌شینه. لیستی که مرحله‌ی قبل خونده شد هنوز نسخه‌ی خودش رو داره، ولی خود فایل milk و eggs و tea رو از دست داده.

خودت رو امتحان کن

# notes.txt holds: milk, eggs
with open("notes.txt") as f:
    for line in f:
        print(line.strip().upper())
  1. MILK
    EGGS
  2. MILK
    
    EGGS
    
  3. MILK
  4. MILK EGGS
جواب رو ببین
MILK
EGGS

درسته. حلقه هر بار یه خط می‌ده، strip() اون \n رو برمی‌داره و upper() حروفش رو بزرگ می‌کنه.

with open("notes.txt", "w") as f:
    f.write("milk\neggs\n")
with open("notes.txt", "a") as f:
    f.write("tea\n")

lines = []
with open("notes.txt") as f:
    for line in f:
        lines.append(line.strip())
print(lines)

خروجی

['milk', 'eggs', 'tea']

کل انیمیشن توی یه برنامه: دو خط با "w" بنویس، سومی رو با "a" اضافه کن، بعد همه رو توی یه لیست برگردون. بدون strip() لیست می‌شد ['milk\n', 'eggs\n', 'tea\n'].

خودت رو امتحان کن

هر تیکه رو به کارش وصل کن

جواب رو ببین
  • "r" → فایل رو می‌خونه؛ پیش‌فرض همینه
  • "w" → فایل رو می‌سازه، یا پاکش می‌کنه و از نو شروع می‌کنه
  • "a" → به آخر اضافه می‌کنه و قبلی‌ها رو نگه می‌داره
  • with → وقتی بلوک تموم شد خودش فایل رو می‌بنده

مرور درس

  • متغیرها وقتی برنامه تموم می‌شه از بین می‌رن؛ فایل روی دیسک داده رو بین دو بار اجرا نگه می‌داره.
  • with open(name, mode) as f: فایل رو باز می‌کنه و آخر بلوک خودش می‌بندتش.
  • "r" می‌خونه (پیش‌فرض)، "w" پاک می‌کنه و می‌نویسه، "a" به آخر اضافه می‌کنه؛ "w" اشتباهی یعنی داده‌ی از دست رفته.
  • write خط جدید اضافه نمی‌کنه و فقط رشته می‌گیره؛ \n رو خودت آخرش بذار.
  • for line in f خط‌هایی می‌ده که با \n تموم می‌شن، پس از line.strip() استفاده کن؛ برای متن فارسی encoding="utf-8" رو اضافه کن.

فقط نخونش، نگهش دار

پث‌وایز هر ایده رو درست قبل از اینکه فراموشش کنی با یه سؤال کوتاه برمی‌گردونه. رایگان روی اندروید و وب، به فارسی و انگلیسی.

Cafe Bazaar Myket باز کردن نسخه‌ی وب

همه‌ی درس‌های این دوره

  1. اولین برنامه‌ت (Your First Program)
  2. متغیرها: اسم برای مقدارها (Variables)
  3. رشته‌ها: کار با متن (Strings)
  4. ورودی و نوع داده‌ها (Input and Types)
  5. تصمیم‌گیری با if (Conditionals)
  6. لیست‌ها: کلی مقدار یه‌جا (Lists)
  7. حلقه‌ها: دوباره و دوباره (Loops)
  8. تابع‌ها: به یه کار اسم بده، دوباره استفاده‌ش کن (Functions)
  9. دیکشنری‌ها: پیدا کردن با اسم (Dictionaries)
  10. خوندن پیام‌های خطا (Reading Errors)
  11. ذخیره و خوندن فایل (Files)
  12. پروژه‌ی آخر: حساب خرج‌ها (Final Project)