فایل‌های داده

اصلاح شده

2026-08-20

چرا این فرمت‌ها؟

  • JSON، CSV و XML سه فرمت پرکاربرد برای ذخیره و تبادل داده هستن — فایل‌های متنی ساده‌ای که پایتون خودش ماژول آماده براشون داره
  • برای فایل‌های جدولی حجیم‌تر (CSV، Excel) کار کردن دستی با open() دست‌وپاگیر می‌شه؛ اونجا کتابخونه‌ی pandas به کمک میاد

JSON

import json

خواندن فایل JSON

with open('data.json', 'r', encoding='utf-8') as f:
    data = json.load(f)

print(data)
  • خروجی معمولاً یک dict یا list پایتونیه

نوشتن فایل JSON

data = {'name': 'Ali', 'age': 25}

with open('output.json', 'w', encoding='utf-8') as f:
    json.dump(data, f, ensure_ascii=False, indent=2)
  • ensure_ascii=False : حروف فارسی درست نوشته بشن، نه به‌صورت کد یونیکد
  • indent=2 : خروجی مرتب و خوانا باشه

تبدیل رشته JSON به دیتای پایتون (و برعکس)

text = '{"name": "Ali", "age": 25}'
data = json.loads(text)      # رشته -> دیکشنری

text2 = json.dumps(data, ensure_ascii=False)   # دیکشنری -> رشته

CSV (با ماژول استاندارد)

import csv

خواندن فایل CSV

with open('data.csv', 'r', encoding='utf-8') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)   # هر row یک لیست از رشته‌هاست
  • برای دسترسی با نام ستون‌ها به‌جای اندیس عددی:
with open('data.csv', 'r', encoding='utf-8') as f:
    reader = csv.DictReader(f)
    for row in reader:
        print(row['name'])   # row یک دیکشنریه

نوشتن فایل CSV

rows = [
    {'name': 'Ali', 'age': 25},
    {'name': 'Sara', 'age': 30}
]

with open('output.csv', 'w', encoding='utf-8', newline='') as f:
    writer = csv.DictWriter(f, fieldnames=['name', 'age'])
    writer.writeheader()
    writer.writerows(rows)
  • newline='' : جلوی افتادن یک خط خالی اضافه بین ردیف‌ها رو می‌گیره

XML

import xml.etree.ElementTree as ET

خواندن فایل XML

فرض کنیم فایل به این شکله:

<students>
    <student>
        <name>Ali</name>
        <age>25</age>
    </student>
</students>
tree = ET.parse('data.xml')
root = tree.getroot()

for student in root.findall('student'):
    name = student.find('name').text
    age = student.find('age').text
    print(name, age)

ساخت و نوشتن فایل XML

root = ET.Element('students')

student = ET.SubElement(root, 'student')
ET.SubElement(student, 'name').text = 'Ali'
ET.SubElement(student, 'age').text = '25'

tree = ET.ElementTree(root)
tree.write('output.xml', encoding='utf-8', xml_declaration=True)

pandas

  • pandas داده رو به‌صورت جدول (DataFrame) میاره که کار باهاش خیلی راحت‌تر از کار دستی با csv هست، مخصوصاً وقتی حجم داده بالا بره یا نیاز به فیلتر/تحلیل داشته باشیم

نصب و وارد کردن

pip install pandas openpyxl
import pandas as pd

openpyxl برای خواندن/نوشتن فایل‌های Excel لازمه (pandas از پشت صحنه ازش استفاده می‌کنه)

خواندن فایل CSV

df = pd.read_csv('data.csv')
print(df)
  • خروجی از نوع DataFrame هست — شبیه یک جدول اکسل

خواندن فایل Excel

df = pd.read_excel('data.xlsx')
print(df)
  • اگه فایل چند شیت داشته باشه، می‌شه شیت رو مشخص کرد:
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')

نگاه سریع به داده

متد کار
df.head() نمایش ۵ ردیف اول
df.shape تعداد (ردیف, ستون)
df.columns لیست نام ستون‌ها
df.info() نوع داده هر ستون + تعداد مقادیر

دسترسی به داده

print(df['name'])          # یک ستون
print(df.iloc[0])           # یک ردیف با اندیس عددی
print(df.loc[0, 'name'])    # یک سلول خاص

فیلتر کردن داده

adults = df[df['age'] >= 18]
print(adults)

نوشتن در فایل

df.to_csv('output.csv', index=False)
df.to_excel('output.xlsx', index=False)
  • index=False : ستون اندیس اضافه (0,1,2,…) توی فایل خروجی نوشته نشه

ساخت DataFrame

data = {
    'name': ['Ali', 'Sara'],
    'age': [25, 30]
}
df = pd.DataFrame(data)

مقایسه سریع

فرمت مناسب برای روش پیشنهادی
JSON داده‌های تودرتو (شیء/آرایه)، تنظیمات، API ماژول json
CSV ساده داده‌های جدولی کوچک، بدون نیاز به تحلیل ماژول csv
CSV / Excel حجیم داده‌های جدولی بزرگ، نیاز به فیلتر و تحلیل pandas
XML داده‌های ساخت‌یافته با تگ، فایل‌های قدیمی‌تر xml.etree.ElementTree