خانه / آموزش‌ها / کار با فایل‌ها در پایتون

کار با فایل‌ها در پایتون

🐍 HomeOfPython
|
📅 1404/10/17

سطح مقدماتی (Beginner Level)

ذخیره اطلاعات در متغیرها موقتی است و با بستن برنامه از بین می‌رود. برای نگهداری دائمی اطلاعات، باید بتوانیم با فایل‌ها کار کنیم. در پایتون تابع داخلی open() کلید اصلی ارتباط با فایل‌هاست.

۱. باز کردن و بستن فایل (Open & Close)

برای کار با یک فایل، ابتدا باید آن را باز کنید. تابع open() دو ورودی اصلی می‌گیرد:

  1. نام فایل (Path): آدرس فایل مورد نظر.
  2. حالت (Mode): مشخص می‌کند می‌خواهیم بخوانیم، بنویسیم یا اضافه کنیم.

حالت‌های اصلی عبارتند از:

  • 'r': خواندن (Read) - پیش‌فرض. اگر فایل نباشد خطا می‌دهد.
  • 'w': نوشتن (Write) - اگر فایل باشد پاکش می‌کند و از نو می‌نویسد. اگر نباشد می‌سازد.
  • 'a': الحاق (Append) - به انتهای فایل اضافه می‌کند.
Python
python
# 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(): تمام خطوط را خوانده و در یک لیست برمی‌گرداند.
Python
Python

۳. مدیریت خودکار فایل با with (Context Managers)

در روش‌های بالا اگر قبل از close() برنامه کرش کند، فایل باز می‌ماند و ممکن است آسیب ببیند. ساختار with تضمین می‌کند که فایل پس از اتمام بلوک کد (حتی در صورت بروز خطا) به صورت خودکار بسته شود. این روش استاندارد و پیشنهادی پایتون است.

Python
Python

سطح پیشرفته (Professional Level)

در سطح حرفه‌ای، با فایل‌های باینری، مدیریت انکودینگ (Encoding)، و جابجایی نشانگر فایل (Cursor) سر و کار داریم. همچنین استفاده از کتابخانه‌های مدرن‌تر مثل pathlib اهمیت پیدا می‌کند.

۱. حالت‌های ترکیبی و باینری

علاوه بر 'r', 'w', 'a'، حالت‌های دیگری نیز وجود دارد:

  • 'b': حالت باینری (Binary) برای عکس، ویدیو و ... (مثلاً 'rb', 'wb').
  • '+': برای به‌روزرسانی (خواندن و نوشتن همزمان). مثلاً 'r+' (خواندن و نوشتن) یا 'w+' (نوشتن و خواندن).

نکته مهم: همیشه هنگام کار با متن فارسی یا غیر انگلیسی، از encoding='utf-8' استفاده کنید.

Python
python
# 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): نشانگر را به موقعیت مشخصی می‌برد.
Python

۳. روش مدرن با pathlib

در پایتون‌های جدید (3.4+)، استفاده از ماژول pathlib جایگزین روش‌های قدیمی os و رشته‌های متنی آدرس فایل شده است. این روش شی‌گرا (Object-Oriented) و خواناتر است.

Python
python
# 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 است.

Python
python
# 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)}")