انعطاف‌پذیری و سهولت استفاده از «زبان برنامه‌نویسی پایتون» (Python Programming Language)، این زبان را به یکی از محبوب‌ترین زبان‌ها به ویژه برای «دانشمندان داده» (Data Scientist)، مبدل کرده است. یکی از دلایل مهم این امر، سادگی کار با مجموعه‌داده‌های بزرگ در زبان پایتون است. امروزه، همه شرکت‌های فناوری، استراتژی‌های خاصی را پیرامون «داده‌ها» برای خود تدوین کرده‌اند. همه این سازمان‌ها متوجه شده‌اند که داشتن داده‌های مناسب (معنادار، تمیز و در هر اندازه‌ای که امکان دارد)، به آن‌ها یک مزیت رقابتی کلیدی می‌دهد. داده‌ها، اگر به صورت موثر مورد استفاده قرار بگیرند، می‌توانند مزیت رقابتی قابل توجهی را برای سازمان به ارمغان بیاورند و بینشی را فراهم کنند که در هیچ کجا و به هیچ شکل دیگر قابل کشف نیست. در طی سال‌های اخیر، لیست فرمت‌هایی که می‌توان داده‌ها را در آن‌ها ذخیره کرد همواره رو به افزایش بوده است. اما در این میان، سه فرمت JSON ،CSV و XML غالب بوده‌اند. در این مطلب، ساده‌ترین راهکارها برای کار با انواع فرمت ها در پایتون (JSON ،CSV و XML)، بیان شده است.

کار با انواع فرمت ها در پایتون

در ادامه، روش کار با فرمت‌های محبوب JSON ،CSV و XML در پایتون بیان و قطعه کدهای لازم برای انجام هر عملیات به طور کامل ارائه شده است.

داده‌های CSV

فایل‌های CSV (سه حرف CSV، سرنامی برای Comma Separated Values هستند) راهکاری متداول برای ذخیره‌سازی داده‌ها محسوب می‌شوند. بیشتر داده‌هایی که در رقابت‌های «کگل» (Kaggle) مورد استفاده قرار می‌گیرند از این نوع هستند. با استفاده از تابع توکار CSV در پایتون، می‌توان فایل‌های CSV را هم خواند (Read) و هم روی آن‌ها نوشت (Write). به طور متداول، داده‌ها در یک لیست از لیست‌ها خوانده می‌شوند. کدی که در ادامه آمده، در این راستا شایان توجه است.

هنگامی که ()csv.reader اجرا شود، همه داده‌های CSV در دسترس قرار می‌گیرند. تابع ()csvreader.next یک خط تنها را از CSV می‌خواند. هر بار که این تابع فراخوانی شود، به خط بعدی می‌رود. همچنین، می‌تواند در هر سطر از فایل CSV با استفاده از حلقه for به صورت for row in csvreader، تکرار داشته باشد (حلقه زدن). باید اطمینان حاصل کرد که تعداد ستون‌ها در کلیه سطرها با هم برابر است. در غیر این صورت، کاربر ممکن است با خطاهایی در حین کار با لیستی از لیست‌ها، مواجه شود.

import csv 
  
filename = "my_data.csv"
  
fields = [] 
rows = [] 
  
# Reading csv file 
with open(filename, 'r') as csvfile: 
    # Creating a csv reader object 
    csvreader = csv.reader(csvfile) 
      
    # Extracting field names in the first row 
    fields = csvreader.next() 
  
    # Extracting each data row one by one 
    for row in csvreader: 
        rows.append(row)
  
# Printing out the first 5 rows 
for row in rows[:5]: 
    print(row)

نوشتن روی فایل CSV در پایتون، به سادگی خواندن داده‌ها از روی آن است. در این راستا، باید اسامی فیلد را در یک لیست کوتاه تنظیم کرد. این بار، باید یک شی ()writer - توسط کاربر - ساخته شود و از آن برای نوشتن داده‌ها در یک فایل به شیوه‌ای بسیار مشابه با کاری که برای خواندن داده‌ها از روی یک فایل انجام شده، استفاده شود.

import csv 
  
# Field names 
fields = ['Name', 'Goals', 'Assists', 'Shots'] 
  
# Rows of data in the csv file 
rows = [ ['Emily', '12', '18', '112'], 
         ['Katie', '8', '24', '96'], 
         ['John', '16', '9', '101'], 
         ['Mike', '3', '14', '82']]
         
filename = "soccer.csv"
  
# Writing to csv file 
with open(filename, 'w+') as csvfile: 
    # Creating a csv writer object 
    csvwriter = csv.writer(csvfile) 
      
    # Writing the fields 
    csvwriter.writerow(fields) 
      
    # Writing the data rows 
    csvwriter.writerows(rows)

البته، نصب کتابخانه فوق‌العاده عالی «پانداس» (Pandas) کار با داده‌ها را پس از خواندن آن‌ها در یک متغیر، بسیار ساده‌تر می‌کند. خواندن از یک فایل CSV با استفاده از کتاب پانداس نیز همچون نوشتن روی آن، با یک خط کد امکان‌پذیر است.

import pandas as pd

filename = "my_data.csv"

# Read in the data
data = pd.read_csv(filename)

# Print the first 5 rows
print(data.head(5))

# Write the data to file
data.to_csv("new_data.csv", sep=",", index=False)

حتی می‌توان از پانداس برای تبدیل یک فایل CSV به یک لیست از دیکشنری‌ها (Dictionaries) تنها با یک خط کد، استفاده کرد. هنگامی که داده‌ها به صورت یک لیست از دیکشنری‌ها قالب‌بندی شدند، از کتابخانه dicttoxml برای تبدیل آن به قالب XML استفاده می‌شود. همچنین، می‌توان آن را به صورت فایل JSON نیز ذخیره کرد.

import pandas as pd
from dicttoxml import dicttoxml
import json

# Building our dataframe
data = {'Name': ['Emily', 'Katie', 'John', 'Mike'],
        'Goals': [12, 8, 16, 3],
        'Assists': [18, 24, 9, 14],
        'Shots': [112, 96, 101, 82]
        }

df = pd.DataFrame(data, columns=data.keys())

# Converting the dataframe to a dictionary
# Then save it to file
data_dict = df.to_dict(orient="records")
with open('output.json', "w+") as f:
    json.dump(data_dict, f, indent=4)

# Converting the dataframe to XML
# Then save it to file
xml_data = dicttoxml(data_dict).decode()
with open("output.xml", "w+") as f:
    f.write(xml_data)

داده‌های JSON

«جی‌سان» (JSON) یک قالب تمیز و به سادگی قابل خواندن را فراهم می‌کند، زیرا ساختاری با استایل دیکشنری را حفظ می‌کند. درست مانند CSV، پایتون دارای یک ماژول توکار برای JSON نیز هست که خواندن و نوشتن را فوق‌العاده در این فرمت آسان می‌کند. در پایتون، پس از خوانده شدن یک فایل CSV، به یک دیکشنری مبدل می‌شود. سپس، دیکشنری مذکور توسط کاربر روی یک فایل نوشته می‌شود.

import json
import pandas as pd

# Read the data from file
# We now have a Python dictionary
with open('data.json') as f:
    data_listofdict = json.load(f)
    
# We can do the same thing with pandas
data_df = pd.read_json('data.json', orient='records')

# We can write a dictionary to JSON like so
# Use 'indent' and 'sort_keys' to make the JSON
# file look nice
with open('new_data.json', 'w+') as json_file:
    json.dump(data_listofdict, json_file, indent=4, sort_keys=True)

# And again the same thing with pandas
export = data_df.to_json('new_data.json', orient='records')

همانطور که پیش از این مشاهده شد، می‌توان داده‌ها را به سادگی با استفاده از کتابخانه Pandas یا ماژول پایتون توکار CSV به CSV مبدل کرد. برای تبدیل به XML، کتابخانه dicttoxml به کمک کاربر می‌آید.

import json
import pandas as pd
import csv

# Read the data from file
# We now have a Python dictionary
with open('data.json') as f:
    data_listofdict = json.load(f)
    
# Writing a list of dicts to CSV
keys = data_listofdict[0].keys()
with open('saved_data.csv', 'wb') as output_file:
    dict_writer = csv.DictWriter(output_file, keys)
    dict_writer.writeheader()
    dict_writer.writerows(data_listofdict)

داده‌های XML

کار با داده‌ها در قالب XML، کمی با انواع داده‌های CSV و JSON متفاوت است. به طور کلی، CSV و JSON به دلیل سادگی که دارند به طور گسترده مورد استفاده قرار می‌گیرند. نوشتن، خواندن و تفسیر هر دو نوع فایل بیان شده، برای انسان آسان است. به منظور کار با این دو فرمت داده، نیازی به هیچ کار دیگری (به جز آنچه بیان شد) نیست. تجزیه (Parsing) یک فایل JSON یا CSV بسیار ساده است. اما کار با فایل‌های XML اندکی دشوارتر است. این در حالی است که فرمت XML نسبت به JSON و CSV دارای ویژگی‌های افزوده‌ای است. کاربر می‌تواند از فضای نام برای ساخت و به اشتراک‌گذاری ساختارهای استاندارد، ارائه بهتری برای ارث‌بری و یک راهکار استانداردشده صنعتی جهت ارائه داده‌ها با شمای XML و DTD و دیگر موارد استفاده کند. برای خواندن داده‌های XML، از ماژول توکار پایتون با زیرماژولی (Sub-Module) با عنوان ElementTree استفاده می‌شود. از آنجا، می‌توان شی ElementTree را با استفاده از کتابخانه xmltodict به یک شی تبدیل کرد. هنگامی که یک دیکشنری وجود دارد، می‌توان آن را به JSON ،CSV یا دیتافریم پانداس (مانند آنچه در بالا مشاهده شد) تبدیل کرد.

import xml.etree.ElementTree as ET
import xmltodict
import json

tree = ET.parse('output.xml')
xml_data = tree.getroot()

xmlstr = ET.tostring(xml_data, encoding='utf8', method='xml')


data_dict = dict(xmltodict.parse(xmlstr))

print(data_dict)

with open('new_data_2.json', 'w+') as json_file:
    json.dump(data_dict, json_file, indent=4, sort_keys=True)

اگر نوشته بالا برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

^^

بر اساس رای ۹ نفر
آیا این مطلب برای شما مفید بود؟
شما قبلا رای داده‌اید!
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.

«الهام حصارکی»، فارغ‌التحصیل مقطع کارشناسی ارشد مهندسی فناوری اطلاعات، گرایش سیستم‌های اطلاعات مدیریت است. او در زمینه هوش مصنوعی و داده‌کاوی، به ویژه تحلیل شبکه‌های اجتماعی، فعالیت می‌کند.

2 نظر در “کار با انواع فرمت ها در پایتون (JSON ،CSV و XML) — به زبان ساده

  • سلام.ممنون از مطلبتون
    میخواستم بدونم اطلاعات داخل یک دیکشنری رو چطور میتونم تبدیل به یک فایل txt یا یک فایل csv کنم.
    ممنون

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد.