فایلهای داده
چرا این فرمتها؟
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 openpyxlimport 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 |