سطح مقدماتی (Beginner Level)
ذخیره اطلاعات در متغیرها موقتی است و با بستن برنامه از بین میرود. برای نگهداری دائمی اطلاعات، باید بتوانیم با فایلها کار کنیم. در پایتون تابع داخلی open() کلید اصلی ارتباط با فایلهاست.
۱. باز کردن و بستن فایل (Open & Close)
برای کار با یک فایل، ابتدا باید آن را باز کنید. تابع open() دو ورودی اصلی میگیرد:
- نام فایل (Path): آدرس فایل مورد نظر.
- حالت (Mode): مشخص میکند میخواهیم بخوانیم، بنویسیم یا اضافه کنیم.
حالتهای اصلی عبارتند از:
'r': خواندن (Read) - پیشفرض. اگر فایل نباشد خطا میدهد.'w': نوشتن (Write) - اگر فایل باشد پاکش میکند و از نو مینویسد. اگر نباشد میسازد.'a': الحاق (Append) - به انتهای فایل اضافه میکند.
# Example 2: Static snippet showing syntax
# Always remember to close the file to free up system resources.
f = open("data.txt", "r")
# ... operations ...
f.close()
۲. خواندن از فایل (Reading)
پس از باز کردن فایل در حالت 'r'، متدهای مختلفی برای خواندن وجود دارد:
read(): کل فایل را یکجا میخواند.readline(): فقط یک خط را میخواند.readlines(): تمام خطوط را خوانده و در یک لیست برمیگرداند.
۳. مدیریت خودکار فایل با with (Context Managers)
در روشهای بالا اگر قبل از close() برنامه کرش کند، فایل باز میماند و ممکن است آسیب ببیند. ساختار with تضمین میکند که فایل پس از اتمام بلوک کد (حتی در صورت بروز خطا) به صورت خودکار بسته شود. این روش استاندارد و پیشنهادی پایتون است.
سطح پیشرفته (Professional Level)
در سطح حرفهای، با فایلهای باینری، مدیریت انکودینگ (Encoding)، و جابجایی نشانگر فایل (Cursor) سر و کار داریم. همچنین استفاده از کتابخانههای مدرنتر مثل pathlib اهمیت پیدا میکند.
۱. حالتهای ترکیبی و باینری
علاوه بر 'r', 'w', 'a'، حالتهای دیگری نیز وجود دارد:
'b': حالت باینری (Binary) برای عکس، ویدیو و ... (مثلاً'rb','wb').'+': برای بهروزرسانی (خواندن و نوشتن همزمان). مثلاً'r+'(خواندن و نوشتن) یا'w+'(نوشتن و خواندن).
نکته مهم: همیشه هنگام کار با متن فارسی یا غیر انگلیسی، از encoding='utf-8' استفاده کنید.
# Example 2: Binary Copy (Snippet)
# How to copy an image file
def copy_image(source, destination):
with open(source, "rb") as src_file:
data = src_file.read()
with open(destination, "wb") as dest_file:
dest_file.write(data)
۲. کار با نشانگر فایل (Seek & Tell)
گاهی لازم نیست فایل را از ابتدا تا انتها بخوانیم.
tell(): موقعیت فعلی نشانگر (Cursor) را به بایت برمیگرداند.seek(offset): نشانگر را به موقعیت مشخصی میبرد.
۳. روش مدرن با pathlib
در پایتونهای جدید (3.4+)، استفاده از ماژول pathlib جایگزین روشهای قدیمی os و رشتههای متنی آدرس فایل شده است. این روش شیگرا (Object-Oriented) و خواناتر است.
# Example 2: Checking existence and properties (Snippet)
from pathlib import Path
file_path = Path("data/report.csv")
if file_path.exists():
print(f"File name: {file_path.name}")
print(f"Parent directory: {file_path.parent}")
print(f"Extension: {file_path.suffix}")
else:
print("File not found!")
۴. خواندن فایلهای حجیم (Memory Efficient)
خواندن یک فایل ۵ گیگابایتی با read() رم سیستم را پر میکند. روش حرفهای، خواندن فایل به صورت خط به خط (Iterative) یا تکهتکه (Chunk) است. آبجکت فایل در پایتون خودش یک Iterator است.
# Example 2: Reading in Chunks (Snippet for binary/large text)
def process_in_chunks(filename, chunk_size=1024):
with open(filename, "rb") as f:
while True:
chunk = f.read(chunk_size)
if not chunk:
break
# process(chunk)
print(f"Processed chunk of size {len(chunk)}")