کار با فایلها
خواندن و نوشتن فایل متنی
بازکردن فایل متنی
From mohsenebrahimy.ir@gmail.com Sat Jan 5 09:14:16 2026
Return-Path: <info@mohsenebrahimy.ir>
Date: Sat, 5 Jan 2026 09:12:18 -0500
To: info@mohsenebrahimy.ir
From: mohsenebrahimy.ir@gmail.com
Subject: Learn Python with Mohsen Ebrahimi
Details: http://mohsenebrahimy.ir/book/base-python
- خروجی یک handle به فایله، نه محتوای واقعی — برای خوندن ازش استفاده میشه
- اگه فایل وجود نداشته باشه → خطا:
FileNotFoundError
| حالت | کاربرد |
|---|---|
'r' |
خواندن (پیشفرض) |
'w' |
نوشتن — ⚠️ محتوای قبلی فایل پاک میشه |
'a' |
append — اضافهکردن به انتهای فایل، بدون پاک کردن محتوای قبلی |
'x' |
ساخت فایل جدید — اگه از قبل وجود داشته باشه خطا میده |
خواندن فایل
- روش ۱: خط به خط با
for(برای فایلهای بزرگ)
- روش ۲: خواندن کل فایل یکجا (برای فایلهای کوچک)
- ⚠️ نکته: محتوا رو حتماً توی متغیر ذخیره کنیم، وگرنه با خواندن مجدد از دست میره
جستجو در فایل
rstrip(): حذف فضای خالی سمت راست رشتهstartswith(): بررسی شروع خط با یک کلمه/رشته خاص
مدیریت خطا
- بهجای هاردکد کردن نام فایل، از کاربر میگیریم — ولی چون فایل ممکنه وجود نداشته باشه، حتماً با
try-exceptپوشش بدیم
exit(): خروج کامل از اجرای برنامه اگه فایل باز نشد
نوشتن در فایل
- پارامتر
'w':- اگه فایل وجود داشته باشه → باز میشه برای نوشتن (⚠️ محتوای قبلی پاک میشه)
- اگه وجود نداشته باشه → فایل جدید ساخته میشه
بستن فایل
- بعد از اتمام کار با فایل، همیشه باید بسته بشه
روش استاندارد و توصیهشده
- روش دستی (باز کردن +
close()دستی) رایجه، ولی در عمل استفاده ازwithتوصیهشدهتره - مزیت: فایل خودکار بسته میشه، حتی اگه وسط کار خطا رخ بده — نیازی به
close()دستی نیست
فایلهای باینری
تفاوت فایل متنی و باینری
| نوع | محتوا | مثال |
|---|---|---|
| متنی (text) | کاراکترهای قابلخواندن، با encoding رمزگذاری میشه | .txt، .csv |
| باینری (binary) | دنباله خام بایتها، بدون تفسیر متنی | .jpg، .png، .mp3، .pdf، .zip |
- در حالت متنی، پایتون بایتها رو با یک encoding (مثلاً UTF-8) به رشته تبدیل میکنه
- در حالت باینری، هیچ تبدیلی انجام نمیشه — داده بهصورت خام (
bytes) خونده/نوشته میشه
باز کردن فایل باینری — حرف b
| حالت | کاربرد |
|---|---|
'rb' |
خواندن باینری |
'wb' |
نوشتن باینری (پاککردن محتوای قبلی) |
'ab' |
append باینری |
'xb' |
ساخت فایل باینری جدید (خطا اگه وجود داشته باشه) |
خواندن فایل باینری
- خروجی از نوع
bytesهست، نهstr - ⚠️ متدهای رشتهای مثل
.rstrip()یا.startswith('متن')رویbytesفرق دارن (باید باb'...'مقایسه بشن)
نوشتن فایل باینری
- فقط
bytesیاbytearrayقابل نوشتنه، نه رشته معمولی
کپی کردن یک فایل باینری (مثال کاربردی)
- برای فایلهای بزرگ بهتره تکهتکه (chunk) بخونیم تا حافظه پر نشه:
تبدیل بین str و bytes
| متد | کار |
|---|---|
str.encode() |
تبدیل رشته به بایت |
bytes.decode() |
تبدیل بایت به رشته |
نکته مهم: باز کردن فایل متنی بهجای باینری (و برعکس) خطا میده
- سعی در خواندن فایل باینری (مثل عکس) با حالت
'r'معمولاً باعث خطای decode میشه:
UnicodeDecodeError: 'utf-8' codec can't decode byte...
- قانون کلی: فایلهای غیرمتنی (عکس، صدا، فایل فشرده، اجرایی) → همیشه با
b
ماژول os
چرا os؟
- ماژول
osبرای کار با سیستمعامل (فایل، پوشه، مسیر) استفاده میشه — چیزی فراتر از خواندن/نوشتن محتوای فایل - وارد کردن:
import os
بررسی وجود فایل/پوشه
نکته: قبل از باز کردن فایل با
open()، میشه اول باos.path.exists()چک کرد (هرچندtry-exceptهم روش رایج و ایمنتریه)
حذف فایل
- ⚠️ اگه فایل وجود نداشته باشه → خطای
FileNotFoundError
تغییر نام / جابهجایی فایل
کار با پوشهها
| تابع | کار |
|---|---|
os.mkdir('folder') |
ساخت یک پوشه |
os.makedirs('a/b/c') |
ساخت پوشههای تودرتو (چند سطحی) |
os.rmdir('folder') |
حذف پوشه (فقط اگه خالی باشه) |
os.listdir('.') |
لیست فایلها و پوشههای داخل یک مسیر |
مسیر فعلی و تغییر مسیر
کار با مسیرها — os.path
| تابع | کار | مثال |
|---|---|---|
os.path.join() |
ساخت مسیر بهصورت درست (سازگار با ویندوز/لینوکس) | os.path.join('data', 'input.txt') |
os.path.basename() |
فقط نام فایل از مسیر | 'data/input.txt' → 'input.txt' |
os.path.dirname() |
فقط مسیر پوشه | 'data/input.txt' → 'data' |
os.path.splitext() |
جدا کردن نام و پسوند فایل | 'input.txt' → ('input', '.txt') |
نکته مهم: بهجای الحاق دستی رشتهها برای مسیر (مثل
'data' + '/' + 'input.txt')، همیشه ازos.path.join()استفاده بشه — چون در ویندوز جداکننده مسیر\است نه/
گرفتن اطلاعات فایل
پیمایش کامل یک درخت پوشه
os.walk()بهصورت بازگشتی همهی زیرپوشهها و فایلها رو برمیگردونه