🐍 کتابخانه مرجع پایتون

📂 مدیریت فایل (File I/O) در پایتون

مدیریت فایل یکی از مهم‌ترین مهارت‌ها در پایتون است. با استفاده از توابع داخلی پایتون، می‌توانید فایل‌ها را باز کنید، بخوانید، بنویسید و ببندید. پایتون با تابع open() کار با فایل‌ها را بسیار ساده کرده است.

🔹 باز کردن و بستن فایل

# باز کردن فایل با open()
file = open("sample.txt", "w")  # حالت نوشتن
file.write("Hello, World!")
file.close()  # همیشه فایل را ببندید

# استفاده از with (مدیریت خودکار بستن)
with open("sample.txt", "w") as file:
    file.write("Hello, World!")  # نیازی به close() نیست
⏳ برای اجرا دکمه را بزنید...

🔹 حالت‌های مختلف باز کردن فایل

حالت توضیح
'r' خواندن (پیش‌فرض) — فایل باید وجود داشته باشد
'w' نوشتن (اگر فایل وجود داشته باشد، محتوای قبلی پاک می‌شود)
'a' افزودن به انتهای فایل
'x' ایجاد فایل جدید (اگر فایل وجود داشته باشد، خطا می‌دهد)
'r+' خواندن و نوشتن
'b' حالت باینری (مثلاً 'rb' یا 'wb')

🔹 نوشتن در فایل

# نوشتن با write()
with open("example.txt", "w") as file:
    file.write("This is line 1\n")
    file.write("This is line 2\n")
    file.write("This is line 3")

# نوشتن با writelines()
lines = ["Line A\n", "Line B\n", "Line C\n"]
with open("example2.txt", "w") as file:
    file.writelines(lines)

print("Files created successfully!")
⏳ برای اجرا دکمه را بزنید...

🔹 خواندن از فایل

# ابتدا یک فایل نمونه ایجاد می‌کنیم
with open("sample_read.txt", "w") as file:
    file.write("Line 1\nLine 2\nLine 3\nLine 4\nLine 5")

# read(): خواندن کل فایل
with open("sample_read.txt", "r") as file:
    content = file.read()
    print("read():")
    print(content)

# readline(): خواندن خط به خط
with open("sample_read.txt", "r") as file:
    print("\nreadline():")
    line = file.readline()
    while line:
        print(line.strip())
        line = file.readline()

# readlines(): خواندن همه خطوط به صورت لیست
with open("sample_read.txt", "r") as file:
    lines = file.readlines()
    print("\nreadlines():")
    print(lines)
⏳ برای اجرا دکمه را بزنید...

🔹 اضافه کردن به فایل (Append)

# ایجاد فایل اولیه
with open("append.txt", "w") as file:
    file.write("First line\n")

# اضافه کردن با حالت 'a'
with open("append.txt", "a") as file:
    file.write("Second line\n")
    file.write("Third line\n")

# خواندن و نمایش
with open("append.txt", "r") as file:
    print(file.read())
⏳ برای اجرا دکمه را بزنید...

🔹 مدیریت خطا در فایل

try:
    # تلاش برای خواندن یک فایل که وجود ندارد
    with open("non_existent_file.txt", "r") as file:
        content = file.read()
except FileNotFoundError:
    print("Error: File not found!")
except PermissionError:
    print("Error: Permission denied!")
except Exception as e:
    print(f"An error occurred: {e}")
else:
    print("File read successfully!")
finally:
    print("This block always executes.")
⏳ برای اجرا دکمه را بزنید...

🔹 خواندن و نوشتن فایل‌های CSV

import csv

# نوشتن در فایل CSV
with open("students.csv", "w", newline="") as file:
    writer = csv.writer(file)
    writer.writerow(["Name", "Age", "City"])
    writer.writerow(["Saba", 22, "Tehran"])
    writer.writerow(["Ali", 24, "Shiraz"])
    writer.writerow(["Reza", 20, "Isfahan"])

# خواندن از فایل CSV
with open("students.csv", "r") as file:
    reader = csv.reader(file)
    print("CSV Content:")
    for row in reader:
        print(row)

# خواندن با DictReader (دسترسی با کلید)
print("\nDictReader:")
with open("students.csv", "r") as file:
    reader = csv.DictReader(file)
    for row in reader:
        print(f"{row['Name']} is {row['Age']} years old from {row['City']}")
⏳ برای اجرا دکمه را بزنید...

🔹 خواندن و نوشتن فایل‌های JSON

import json

# داده نمونه
data = {
    "name": "Saba",
    "age": 28,
    "city": "Tehran",
    "skills": ["Python", "Data Science", "AI"]
}

# نوشتن در فایل JSON
with open("data.json", "w") as file:
    json.dump(data, file, indent=4)

# خواندن از فایل JSON
with open("data.json", "r") as file:
    loaded_data = json.load(file)
    print("JSON Content:")
    print(loaded_data)
    print(f"Name: {loaded_data['name']}")
    print(f"Skills: {', '.join(loaded_data['skills'])}")
⏳ برای اجرا دکمه را بزنید...

🔹 کار با دایرکتوری‌ها

import os

# ایجاد دایرکتوری
if not os.path.exists("my_folder"):
    os.mkdir("my_folder")
    print("Directory created!")

# بررسی وجود فایل یا دایرکتوری
print(f"my_folder exists: {os.path.exists('my_folder')}")
print(f"data.json exists: {os.path.exists('data.json')}")

# لیست فایل‌های یک دایرکتوری
print("\nFiles in current directory:")
for item in os.listdir("."):
    if os.path.isfile(item):
        print(f"File: {item}")
    elif os.path.isdir(item):
        print(f"Directory: {item}")

# حذف فایل (احتیاط!)
# os.remove("example.txt")
⏳ برای اجرا دکمه را بزنید...

🔹 مثال جامع: سیستم ذخیره‌سازی داده

import json
import os

class DataManager:
    def __init__(self, filename):
        self.filename = filename
        self.data = self.load_data()

    def load_data(self):
        """بارگذاری داده از فایل JSON"""
        if os.path.exists(self.filename):
            with open(self.filename, "r") as file:
                return json.load(file)
        return {"users": [], "count": 0}

    def save_data(self):
        """ذخیره داده در فایل JSON"""
        with open(self.filename, "w") as file:
            json.dump(self.data, file, indent=4)

    def add_user(self, name, age, city):
        """اضافه کردن کاربر جدید"""
        user = {"name": name, "age": age, "city": city}
        self.data["users"].append(user)
        self.data["count"] += 1
        self.save_data()
        print(f"User {name} added successfully!")

    def show_users(self):
        """نمایش همه کاربران"""
        print(f"\nTotal users: {self.data['count']}")
        for user in self.data["users"]:
            print(f"{user['name']} ({user['age']}) - {user['city']}")

    def search_user(self, name):
        """جستجوی کاربر با نام"""
        for user in self.data["users"]:
            if user["name"].lower() == name.lower():
                return user
        return None

# استفاده
dm = DataManager("users.json")

# اضافه کردن کاربران
dm.add_user("Saba", 28, "Tehran")
dm.add_user("Ali", 32, "Shiraz")
dm.add_user("Reza", 25, "Isfahan")

# نمایش کاربران
dm.show_users()

# جستجو
user = dm.search_user("Ali")
if user:
    print(f"\nFound: {user['name']} from {user['city']}")
⏳ برای اجرا دکمه را بزنید...

📌 نکات کلیدی

← قبلی: توابع → بعدی: مدیریت خطا ↑ بازگشت به فهرست مقدماتی