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

۱۷۰۰ بازدید
آخرین به‌روزرسانی: ۲۸ خرداد ۱۴۰۱
زمان مطالعه: ۵ دقیقه
کار با انواع فرمت ها در پایتون (JSON ،CSV و XML) — به زبان ساده

انعطاف‌پذیری و سهولت استفاده از «زبان برنامه‌نویسی پایتون» (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، تکرار داشته باشد (حلقه زدن). باید اطمینان حاصل کرد که تعداد ستون‌ها در کلیه سطرها با هم برابر است. در غیر این صورت، کاربر ممکن است با خطاهایی در حین کار با لیستی از لیست‌ها، مواجه شود.

1import csv 
2  
3filename = "my_data.csv"
4  
5fields = [] 
6rows = [] 
7  
8# Reading csv file 
9with open(filename, 'r') as csvfile: 
10    # Creating a csv reader object 
11    csvreader = csv.reader(csvfile) 
12      
13    # Extracting field names in the first row 
14    fields = csvreader.next() 
15  
16    # Extracting each data row one by one 
17    for row in csvreader: 
18        rows.append(row)
19  
20# Printing out the first 5 rows 
21for row in rows[:5]: 
22    print(row)

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

1import csv 
2  
3# Field names 
4fields = ['Name', 'Goals', 'Assists', 'Shots'] 
5  
6# Rows of data in the csv file 
7rows = [ ['Emily', '12', '18', '112'], 
8         ['Katie', '8', '24', '96'], 
9         ['John', '16', '9', '101'], 
10         ['Mike', '3', '14', '82']]
11         
12filename = "soccer.csv"
13  
14# Writing to csv file 
15with open(filename, 'w+') as csvfile: 
16    # Creating a csv writer object 
17    csvwriter = csv.writer(csvfile) 
18      
19    # Writing the fields 
20    csvwriter.writerow(fields) 
21      
22    # Writing the data rows 
23    csvwriter.writerows(rows)

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

1import pandas as pd
2
3filename = "my_data.csv"
4
5# Read in the data
6data = pd.read_csv(filename)
7
8# Print the first 5 rows
9print(data.head(5))
10
11# Write the data to file
12data.to_csv("new_data.csv", sep=",", index=False)

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

1import pandas as pd
2from dicttoxml import dicttoxml
3import json
4
5# Building our dataframe
6data = {'Name': ['Emily', 'Katie', 'John', 'Mike'],
7        'Goals': [12, 8, 16, 3],
8        'Assists': [18, 24, 9, 14],
9        'Shots': [112, 96, 101, 82]
10        }
11
12df = pd.DataFrame(data, columns=data.keys())
13
14# Converting the dataframe to a dictionary
15# Then save it to file
16data_dict = df.to_dict(orient="records")
17with open('output.json', "w+") as f:
18    json.dump(data_dict, f, indent=4)
19
20# Converting the dataframe to XML
21# Then save it to file
22xml_data = dicttoxml(data_dict).decode()
23with open("output.xml", "w+") as f:
24    f.write(xml_data)

داده‌های JSON

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

1import json
2import pandas as pd
3
4# Read the data from file
5# We now have a Python dictionary
6with open('data.json') as f:
7    data_listofdict = json.load(f)
8    
9# We can do the same thing with pandas
10data_df = pd.read_json('data.json', orient='records')
11
12# We can write a dictionary to JSON like so
13# Use 'indent' and 'sort_keys' to make the JSON
14# file look nice
15with open('new_data.json', 'w+') as json_file:
16    json.dump(data_listofdict, json_file, indent=4, sort_keys=True)
17
18# And again the same thing with pandas
19export = data_df.to_json('new_data.json', orient='records')

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

1import json
2import pandas as pd
3import csv
4
5# Read the data from file
6# We now have a Python dictionary
7with open('data.json') as f:
8    data_listofdict = json.load(f)
9    
10# Writing a list of dicts to CSV
11keys = data_listofdict[0].keys()
12with open('saved_data.csv', 'wb') as output_file:
13    dict_writer = csv.DictWriter(output_file, keys)
14    dict_writer.writeheader()
15    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 یا دیتافریم پانداس (مانند آنچه در بالا مشاهده شد) تبدیل کرد.

1import xml.etree.ElementTree as ET
2import xmltodict
3import json
4
5tree = ET.parse('output.xml')
6xml_data = tree.getroot()
7
8xmlstr = ET.tostring(xml_data, encoding='utf8', method='xml')
9
10
11data_dict = dict(xmltodict.parse(xmlstr))
12
13print(data_dict)
14
15with open('new_data_2.json', 'w+') as json_file:
16    json.dump(data_dict, json_file, indent=4, sort_keys=True)

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

^^

بر اساس رای ۱۰ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
towardsdatascience
۲ دیدگاه برای «کار با انواع فرمت ها در پایتون (JSON ،CSV و XML) — به زبان ساده»

سلام

ممنون میشم راهنمایی کنید:
چطور میتونم تعداد زیادی فایل text را به یک فایل CSV تبدیل کنم؟

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

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *