📂 مدیریت فایل (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() نیست
⏳ برای اجرا دکمه را بزنید...
🔹 حالتهای مختلف باز کردن فایل
🔹 نوشتن در فایل
# نوشتن با 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']}")
⏳ برای اجرا دکمه را بزنید...
📌 نکات کلیدی
- ✅ با
open()فایل را باز کنید و باclose()ببندید. - ✅ استفاده از
with open()بهترین روش است (خودکار بسته میشود). - ✅ حالتهای اصلی:
'r'(خواندن)،'w'(نوشتن)،'a'(افزودن). - ✅
read()،readline()وreadlines()برای خواندن. - ✅
write()وwritelines()برای نوشتن. - ✅ برای فایلهای CSV از
csvماژول استفاده کنید. - ✅ برای فایلهای JSON از
jsonماژول استفاده کنید. - ✅ با
osماژول میتوانید دایرکتوریها را مدیریت کنید. - ✅ همیشه خطاهای مربوط به فایل را مدیریت کنید (
FileNotFoundError).