diff --git a/source/changelog.rst b/source/changelog.rst
index 5c3d8cd..28c2c6f 100644
--- a/source/changelog.rst
+++ b/source/changelog.rst
@@ -12,6 +12,18 @@
=============
+.. raw:: html
+
+ 00135 - ]چهارشنبه ۶ اردیبهشت ۱۴۰۲
+
+* درس دهم ویرایش و بروزرسانی گردید.
+* بخش «ساختارهای ذخیره و تبادل داده» به درس دهم اضافه شد.
+* [`Issue #60 `__]
+
+
+----
+
+
.. raw:: html
00134 - یکشنبه ۳ اردیبهشت ۱۴۰۲
diff --git a/source/index.rst b/source/index.rst
index 7094e84..9a6b70d 100644
--- a/source/index.rst
+++ b/source/index.rst
@@ -41,7 +41,7 @@
lessons/l08-list-and-tuple-in-python
lessons/l08-set-and-dict-in-python
lessons/l09-control-flow-statements-in-python
- lessons/l10
+ lessons/l10-input-file-json-and-serialization-in-python
lessons/l11
lessons/l12
lessons/l13
diff --git a/source/lessons/l10.rst b/source/lessons/l10-input-file-json-and-serialization-in-python.rst
similarity index 72%
rename from source/lessons/l10.rst
rename to source/lessons/l10-input-file-json-and-serialization-in-python.rst
index d031cd3..9775a05 100644
--- a/source/lessons/l10.rst
+++ b/source/lessons/l10-input-file-json-and-serialization-in-python.rst
@@ -1,9 +1,9 @@
.. role:: emoji-size
.. meta::
- :description: کتاب آموزش زبان برنامه نویسی پایتون به فارسی، آموزش فایل در پایتون، آموزش تابع input در پایتون، آموزش تابع print در پایتون
- :keywords: آموزش, آموزش پایتون, آموزش برنامه نویسی, پایتون, انواع شی, انواع داده, انواع شی در پایتون, انواع داده در پایتون, پایتون
+ :description: پایتون به پارسی - کتاب آنلاین و آزاد آموزش زبان برنامهنویسی پایتون - درس دهم: فایل، ورودی و خروجی (I/O) در پایتون
+.. _lesson-10:
درس ۱۰: فایل، ورودی و خروجی (I/O) در پایتون
======================================================
@@ -17,7 +17,10 @@
-موضوع این درس به چگونگی دریافت یا خواندن دادهها از کاربر حالت تعاملی یا فایلها و همچنین نمایش یا نوشتن در آنها اختصاص یافته است؛ بر همین اساس در متن درس به بررسی شی فایل و تابعهای آماده ``()print`` و ``()input`` در پایتون پرداخته خواهد شد. به برخی از تفاوتها در پیادهسازی نسخه جدید پایتون (شاخه 3x) که به موضوع این درس مربوط میباشند نیز اشاره شده است.
+موضوع این درس به چگونگی دریافت ورودی از کاربر حالت تعاملی، خواندن و پردازش فایلها و همچنین نوشتن در فایل اختصاص یافته است؛ بر همین اساس در متن درس به بررسی شی فایل پایتون و تابعهای آماده ``()print`` و ``()input`` پرداخته و همچنین در پایان برخی ساختارهای رایج در ذخیره داده در فایل یا تبادل آن اشاره شده است.
+
+
+
@@ -32,6 +35,8 @@
----
+.. _files:
+
فایلها
--------
@@ -48,6 +53,11 @@
+.. _python-open:
+
+
+تابع open
+~~~~~~~~~~~~
پایتون یک نوع شی آماده برای دستیابی فایلها در برنامه ارایه میدهد که این شی با استفاده از تابع آماده ``(open(file, mode`` [`اسناد پایتون `__] ایجاد میگردد؛ آرگومان نخست یک شی رشته حاوی نام کامل فایل (نشانی + نام + پسوند) مورد نظر بر روی دیسک کامپیوتر است و آرگومان دوم نیز یک رشته با مقداری خاص است و حالتی که این فایل میبایست در آن باز شود را مشخص میسازد؛ این آرگومان اختیاری است و مقدار پیشفرض آن ``'r'`` میباشد. برای نمونه به کدهای پایین که با یکدیگر معادل هستند توجه نمایید::
@@ -117,7 +127,12 @@
*تابع ()open آرگومانهای اختیاری دیگری نیز دارد که برای بررسی آنها میتوانید به اسناد پایتون مراجعه نمایید.*
-.. rubric:: متدهای شی فایل
+
+.. _python-file-object-methods:
+
+متدهای شی فایل پایتون
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
* ``(write(string``: یک شی از نوع ``str`` یا ``bytes`` را دریافت میکند و آن را درون شی فایل مورد نظر مینویسد::
@@ -135,31 +150,25 @@
::
- >>> # Python 3x
-
>>> output = open('textfile.txt', 'w')
>>> output.write(text)
37
>>> output.close()
- *در پایتون 3x، متد write تعداد کاراکترهایی که مینویسد را برمیگرداند.*
+ *متد write تعداد کاراکترهایی که مینویسد را برمیگرداند.*
::
- >>> # Python 3x
-
>>> output = open('binaryfile.bin', 'wb')
>>> output.write(text)
Traceback (most recent call last):
File "", line 1, in
TypeError: a bytes-like object is required, not 'str'
- *در پایتون 3x به این دلیل که نوع رشتههای باینری (bytes) از رشتههای معمولی (str) جدا گشته است، نمیتوان از شی str برای نوشتن در فایلی که در حالت باینری باز شده است استفاده کرد.*
+ *نمیتوان از شی str برای نوشتن در فایلی که در حالت باینری باز شده است استفاده کرد.*
::
- >>> # Python 3x
-
>>> data = '1) Python\n2) Programming\n3) Language\n'
>>> # Convert str to bytes
@@ -218,42 +227,7 @@
1) Python2) Programming3) Language
- به نمونه کدهای بالا در پایتون 2x نیز توجه نمایید::
-
- >>> # Python 2x
-
- >>> output = open('textfile.txt', 'w')
- >>> output.write('1) Python\n2) Programming\n3) Language\n')
- >>> output.close()
-
- ::
-
- >>> # Python 2x
-
- >>> data = '1) Python\n2) Programming\n3) Language\n'
-
- >>> type(data)
-
-
- >>> output = open('binaryfile.bin', 'wb')
- >>> output.write(data)
- >>> output.close()
-
- ::
-
- >>> # Python 2x
-
- >>> bdata = b'1) Python\n2) Programming\n3) Language\n'
-
- >>> type(bdata)
-
-
- >>> output = open('binaryfile.bin', 'wb')
- >>> output.write(bdata)
- >>> output.close()
-
-
-* ``()close``: پس از پایان کار با هر فایل میبایست که آن را ببندید؛ این متد فایل باز شده را میبندد. شی فایل مورد نظر پس از فراخوانی این متد، هیچ متد دیگری را نمیتواند فراخوانی کند.
+* ``()close``: پس از پایان کار با هر فایل، میبایست آن را ببندید؛ این متد فایل باز شده را میبندد. شی فایل مورد نظر پس از فراخوانی این متد، هیچ متد دیگری را نمیتواند فراخوانی کند.
زمانی که شمارش ارجاع به یک شی فایل به صفر برسد یا وقتی متغیر فایل به شی فایل دیگری اشاره کند، پایتون شی قبلی را به صورت خودکار میبندد؛ ولی همیشه بهتر است که بستن فایل به صورت صریح توسط برنامهنویس انجام شود.
@@ -268,7 +242,7 @@
True
-* ``()read``: تمام محتوای فایل را میخواند و در قالب یک شی از نوع ``str`` - برای فایلهای متنی در هر دو شاخه پایتون و باینری در پایتون 2x - یا ``bytes`` - برای فایلهای باینری در پایتون 3x - برمیگرداند::
+* ``()read``: تمام محتوای فایل را میخواند و در قالب یک شی از نوع ``str`` (برای فایلهای متنی) یا ``bytes`` (برای فایلهای باینری) برمیگرداند::
>>> input = open('textfile.txt')
@@ -291,7 +265,7 @@
::
- >>> # Python 3x, Reading a binary file
+ >>> # Reading a binary file
>>> input = open('binaryfile.bin', 'rb')
@@ -309,29 +283,6 @@
b'1) Python\n2) Programming\n3) Language\n'
>>>
- ::
-
- >>> # Python 2x, Reading a binary file
-
- >>> input = open('binaryfile.bin', 'rb')
-
- >>> content = input.read()
-
- >>> input.close()
-
- >>> type(content)
-
-
- >>> content
- '1) Python\n2) Programming\n3) Language\n'
-
- >>> print content
- 1) Python
- 2) Programming
- 3) Language
-
- >>>
-
این متد یک آرگومان اختیاری نیز دارد؛ این آرگومان یک عدد صحیح است که تعداد کاراکتر (یا بایت) که میبایست از فایل خوانده و برگردانده شوند را تعیین میکند::
>>> f = open('textfile.txt')
@@ -353,7 +304,7 @@
>>> f.close()
- به نمونه کد بالا توجه نمایید؛ هنگامی که فایل در این حالت (rt) باز شده است اشارهگر در ابتدای فایل قرار گرفته **و با هر میزان خواندن از فایل، موقعیت اشارهگر نیز به جلو حرکت داشته است.**
+ به نمونه کد بالا توجه نمایید؛ هنگامی که فایل در حالت (rt) باز شده است اشارهگر در ابتدای فایل قرار گرفته **و با هر میزان خواندن از فایل، موقعیت اشارهگر نیز به جلو حرکت داشته است.**
|
@@ -439,10 +390,12 @@
از آنجا که متن درون فایل خود حاوی Newline (در اینجا: ``'n\'``) است، آرگومان ``end`` تابع ``()print`` را برای جلوگیری از درج ``'n\'`` در انتهای هر سطر تغییر دادیم [در بخش print درباره آرگومان end صحبت خواهیم کرد].
+.. _python-with-as:
+
دستور ``with/as``
~~~~~~~~~~~~~~~~~~~
-یک دستور مرکب است که از اشیایی که با نوع ”Context Manager“ [`اسناد پایتون `__] در پایتون شناخته میشوند، پشتیبانی میکند [`PEP 343 `_]. برخی از اشیا در پایتون - به مانند شی فایل - قابلیتی با نام ”Context Manager“ دارند؛ برای پیاده سازی این قابلیت، کلاس شی مورد نظر میبایست حاوی دو متد ویژه ``()__enter__`` و ``()__exit__`` باشد که به ترتیب در زمانهای «ورود به» و «خروج از» بدنه دستور ``with/as`` فراخوانی میشوند.
+یک دستور مرکب است که از اشیایی که با نوع ”Context Manager“ [`اسناد پایتون `__] در پایتون شناخته میشوند، پشتیبانی میکند [`PEP 343 `_]. برخی از اشیا در پایتون - به مانند شی فایل - قابلیتی با نام ”Context Manager“ دارند؛ برای پیاده سازی این قابلیت، کلاس شی مورد نظر میبایست حاوی دو متد ویژه ``()__enter__`` و ``()__exit__`` باشد که به ترتیب در زمانهای «ورود به» و «خروج از» بدنه دستور ``with/as`` فراخوانی میشوند. [این نوع شی به صورت کاملتر توسط درس بیست و یکم برسی خواهد شد.]
دستور ``with/as`` ساختاری مشابه پایین دارد:
@@ -476,7 +429,7 @@
with B() as b:
statements
-همچنین به نسخههای 2.7 و از 3.1 به بعد پایتون سینتکس جدیدی افزوده شده است که توسط آن میتوان همزمان از چند Context Manager بهره گرفت:
+همچنین از نسخه 3.1 به بعد پایتون سینتکس جدیدی افزوده شده است که توسط آن میتوان همزمان از چند Context Manager بهره گرفت:
.. code-block:: html
@@ -490,6 +443,8 @@
if 'key' in line:
fout.write(line)
+.. _python-standard-file-objects:
+
شی فایل استاندارد
-------------------
سه نوع شی فایل توسط مفسر پایتون ایجاد میگردد که هر سه آنها توسط ماژول ``sys`` در دسترس هستند:
@@ -501,6 +456,7 @@
نه همیشه ولی میتوان منبع ``sys.stdin`` را صفحهکلید کامپیوتر و منبع ``sys.stdout`` و ``sys.stderr`` را نیز صفحهنمایش در نظر گرفت.
+.. _python-input:
تابع ()input
--------------
@@ -508,17 +464,13 @@
از این تابع در پایتون برای گرفتن ورودی از کاربر - در حالت تعاملی - استفاده میگردد که در نسخه جدید تغییراتی با نسخه قدیمی ایجاد شده است.
-.. rubric:: پایتون 2x:
-* ``()raw_input``
-* ``()input``
+تابع ``()input`` [`اسناد پایتون `__] یک سطر از کاربر را میخواند و در قالب یک شی از نوع ``str`` برمیگرداند::
-در این شاخه از پایتون دو تابع ``()raw_input`` [`اسناد پایتون `__] و ``()input`` [`اسناد پایتون `__] برای همین منظور در دسترس است. تابع ``()raw_input`` یک سطر از کاربر را میخواند و در قالب یک شی از نوع ``str`` برمیگرداند::
+ >>> s = input()
- >>> s = raw_input()
- Hello Python
+با اجرا دستور، مفسر پایتون منتظر ورود متن میماند - در این نمونه متن Hello Python با استفاده از صفحهکلید، تایپ میشود - سپس با فشردن کلید Enter، پایان ورود داده اعلام و سپس مفسر پایتون تمام کاراکترهای دریافتی را در قالب یک شی رشته - نوع ``str`` - به متغیر ``s`` ارجاع میدهد::
-با اجرا دستور سطر یکم، مفسر پایتون منتظر ورود متن میماند - در این نمونه متن Hello Python نوشته میشود - سپس با دریافت کلید Enter تمام کاراکترهای دریافتی را در قالب یک شی رشته - نوع ``str`` - به متغیر ``s`` ارجاع میدهد::
>>> s
'Hello Python'
@@ -527,7 +479,7 @@
همچنین میتوان متنی را برای مشاهده کاربر به صورت آرگومان در فراخوانی تابع قرار داد::
- >>> s = raw_input("What's your name? ")
+ >>> s = input("What's your name? ")
What's your name? Alan
>>> s
@@ -535,7 +487,7 @@
::
- >>> s = raw_input("How old are you? ")
+ >>> s = input("How old are you? ")
How old are you? 41
>>> s
@@ -543,7 +495,8 @@
>>> type(s)
-تابع ``()input`` در پایتون 2x نیز عملکردی برابر با دستور ``(()eval(raw_input`` دارد. ``()eval`` [`اسناد پایتون `__] تابع آماده دیگری در پایتون است که یک شی رشته را دریافت و متن آن را به شکل کد پایتون تفسیر میکند::
+اکنون زمان خوبی است تا با یکی دیگر از تابعهای آماده در پایتون آشنا شویم. ``()eval`` [`اسناد پایتون `__] تابع آماده دیگری در پایتون است که یک شی رشته را دریافت و متن آن را به شکل کد پایتون تفسیر میکند::
+
>>> x = 1
>>> y = eval('x + 1')
@@ -585,142 +538,34 @@
>>> print eval("__import__('os').getcwd()")
/home/saeid
-تابع ``()__import__`` [`اسناد پایتون `__] عملکردی برابر با دستور ``import`` دارد ولی با این تفاوت که میتوان از آن به شکلی پویا در طی اجرای برنامه برای وارد کردن ماژولهای گوناگون استفاده نمود؛ در این حالت نام یک ماژول حتی میتواند به شکل یک متغیر در آرگومان تابع قرار بگیرد.
-
-اکنون که با عملکرد تابع ``()eval`` آشنا شدهاید به بیان مثالهایی از تابع ``()input`` - در نسخههای 2x - میپردازیم::
-
- >>> s = input("What's your name? ")
- What's your name? Alan
-
- Traceback (most recent call last):
- File "", line 1, in
- File "", line 1, in
- NameError: name 'Alen' is not defined
- >>>
+تابع ``()__import__`` [`اسناد پایتون `__] عملکردی برابر با دستور ``import`` دارد ولی با این تفاوت که میتوان از آن به شکلی پویا در طی اجرای برنامه برای وارد کردن ماژولهای گوناگون استفاده نمود؛ در این حالت نام یک ماژول حتی میتواند به شکل یک متغیر در آرگومان تابع قرار بگیرد.
-در نمونه کد بالا؛ ورودی کاربر - متن Alen - با هیچ سینتکس تعریف شدهای در پایتون مطابقت نداشته و باعث بروز خطا گشته است::
- >>> s = input("What's your name? ")
- What's your name? "Alan"
-
- >>> s
- 'Alan'
+برای تفریح، اکنون میتوانید تنها با یک خط کد پایین یک ماشینحساب ساده ایجاد کنید :)
::
- >>> s = input("How old are you? ")
- How old are you? 41
-
- >>> s
- 41
- >>> type(s)
-
-
-و مثالی دیگر::
-
- >>> a = raw_input()
- 3 * 4 ** 5
-
- >>> a
- '3 * 4 ** 5'
-
-
- >>> b = input()
- 3 * 4 ** 5
-
- >>> b
- 3072
-
-
-.. rubric:: پایتون 3x:
-
-* ``()input``
-در این شاخه از پایتون تابع ``()input`` از شاخه 2x وجود ندارد (حذف شده) و تنها تابع ``()raw_input`` باقی مانده است که آن هم به ``()input`` [`اسناد پایتون `__] تغییر نام پیدا کرده است.
+ print(eval(input("Type your formula: ")))
-تابع ``()input`` در پایتون 3x همانند تابع ``()raw_input`` در پایتون 2x است::
- >>> s = input("What's your name? ")
- What's your name? Alan
-
- >>> s
- 'Alan'
- >>> type(s)
-
+::
+ Type your formula: 2 * 5 + 30 / 2
+ 25.0
+.. _python-print:
تابع ()print
--------------
-.. rubric:: پایتون 2x:
-
-در این شاخه از پایتون print به شکل یک دستور ساده در پایتون پیادهسازی شده است [`اسناد پایتون `__]. این دستور یک یا چند شی را ابتدا به نوع ``str`` تبدیل کرده و سپس به خروجی میفرستد::
-
- >>> s = 'Python'
-
- >>> print s
- Python
-
- >>> print s, "2.x"
- Python 2.x
-
- >>> print 4 * 5 / 2, 3 * 3
- 10 9
-
-::
-
- >>> print
-
- >>>
-
-
-
-* اشیا میبایست توسط یک کاما ``,`` از یکدیگر جدا شوند.
-* این دستور به صورت پیشفرض یک حرف فاصله (یک کلید Space) در بین اشیا قرار میدهد.
-* در صورتی که یک عبارت محاسباتی یا منطقی به این دستور داده شود، ابتدا حاصل آن محاسبه یا ارزیابی شده و سپس به نوع ``str`` تبدیل میگردد.
-* دستور ``print`` به شکل تنها، یکی سطر خالی را ایجاد میکند.
-
-دستور print همچنین به صورت پیشفرض یک ``'n\'`` در انتهای هر سطر قرار میدهد؛ برای لغو این رفتار میتوان در انتهای دستور یک کاما ``,`` قرار داد::
-
- >>> for a in range(5):
- ... print a
- ...
- 0
- 1
- 2
- 3
- 4
- >>>
-
-
- >>> for a in range(5):
- ... print a,
- ...
- 0 1 2 3 4
- >>>
-
-این دستور توانایی نوشتن در شی فایلی غیر از شی استاندارد را نیز دارد؛ برای این منظور میبایست از الگوی پایین پیروی گردد::
-
- >>> text = 'Hi :)'
- >>> output = open('textfile.txt', 'w')
-
- >>> print >> output, text
-
- >>> output.close()
-
-
-
-
-.. rubric:: پایتون 3x:
-
-دستور ``print`` به شکل تابع ``()print`` در نسخههای 3x پایتون پیادهسازی شده است [`اسناد پایتون `__]؛ الگوی این تابع به شکل پایین میباشد::
+پیشتر با تابع ``()print`` پایتون آشنا هستیم ولی در اینجا میخواهیم کمی بیشتر آن را بررسی نماییم. این تابع [`اسناد پایتون `__]؛ الگویی به شکل پایین دارد::
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
-* ``objects*``: بیانگر اشیایی است میخواهیم در خروجی قرار بدهیم. که میتواند هیچ باشد - که برابر نمایش یک سطر خالی است - یا اینکه میتواند یک یا چند شی - که در این صورت اشیا میبایست توسط یک کاما ``,`` از یکدیگر جدا شوند - را در بر گیرد::
+* ``objects*``: بیانگر اشیایی است میخواهیم در خروجی قرار بدهیم. که میتواند هیچ باشد - که برابر نمایش یک سطر خالی است - یا اینکه میتواند یک یا چند شی - که در این صورت اشیا میبایست توسط یک کاما ``,`` از یکدیگر جدا شوند - را در برگیرد::
>>> print()
@@ -780,12 +625,102 @@
* ``flush``: این آرگومان از نسخه 3.3 به تابع ``()print`` پایتون افزوده شده است. هنگامی که خروجی بر روی یک فایل قرار گرفته باشد؛ با تنظیم این گزینه بر روی مقدار ``True``، عمل انتقال متن به فایل بدون اتلاف وقت انجام میپذیرد.
-این تابع با استفاده از دستور import پایین در نسخههای 2.6 و 2.7 پایتون نیز در دسترس است [`اسناد پایتون `__]::
+.. _standard-data-exchange-formats:
+
+ساختارهای ذخیره و تبادل داده
+-----------------------------
+
+اکنون با ذخیره اطلاعات بر روی فایل و خواندن آنها با استفاده از زبان برنامهنویسی پایتون آشنا شدهاید. زمانهای بسیاری پیش خواهد آمد که برنامهنویس نیاز دارد دادهای را بر روی فایل بنویسد یا دادههایی مانند پارامترهای پیکربندی نیز از فایلها در طول اجرای برنامه بخواند. شما در برنامه خود از هر ساختاری میتوانید برای ذخیره اطلاعات استفاده کنید ولی در علم رایانش به مرور زمان ساختارهای استانداردی برای این منظور تعریف شده است. علاوه بر سهولت در کار با فایلها و امکان استفاده از بسیاری از ابزارهای از پیشآماده برای پردازش این دست از فایلها، پیروی از این ساختارها به همگامسازی برنامه شما با دیگر برنامهها کمک میکند چرا که این ساختارها همانند یک زبان مشترک برای تبادل اطلاعات هستند، یک استاندارد برای کار با دادههایی که نیاز به تبادل یا ذخیره به شکل یک فایل را دارند. در ادامه به معرفی برخی از این ساختارهای رایج خواهیم پرداخت.
- from __future__ import print_function
+.. _file-formats-xml:
+XML
+~~~~~~
+ساختار Extensible Markup Language یا همان XML [`ویکیپدیا `__] یکی از با سابقهترین نوع از ساختار تبادل داده در علم رایانش است. این ساختار بر اساس node یا elementهای تو در تو ایجاد میگردد. از این ساختار بیشتر برای ذخیره پارامترهای پیکربندی یا تبادل داده در برخی پرتکلها به مانند SOAP [`ویکیپدیا `__] استفاده میشود. به نمونه فایل زیر توجه نمایید::
+
+
+
+ John
+ Doe
+ 21
+ Male
+ 87
+
+
+ Jane
+ Smith
+ 19
+ Female
+ 95
+
+
+ Tom
+ Lee
+ 20
+ Male
+ 78
+
+
+
+در این مثال اطلاعات مربوط به سه دانش آموز سازماندهی شده است. XML از elementهای تودرتو ایجاد میگردد، هر element شروع ```` و پایان ```` مشخصی دارد و میتواند حاوی یک داده یا یک (یا چند - لیست) element دیگر باشد. فضاهای خالی و نظم تورفتگیها اهمیتی ندارد و تنها برای خوانایی بیشتر استفاده شده است.
+
+در پایتون میتوان به سادگی با استفاده از ماژول ``xml.etree.ElementTree`` [`اسناد پایتون `__] از کتابخانه استاندارد آن، با این نوع فایل کار کرد. البته ابزارهای دیگری نیز توسط دیگر کاربران پایتون توسعه داده شده است که در صورت نیاز یا علاقه میتوانید با کمی جستجو آنها را بیابید.
+
+.. _file-formats-csv:
+
+CSV
+~~~~~~
+
+ساختار Comma-Separated Values یا CSV [`ویکیپدیا `__] دادهها را مانند یک جدول سازماندهی میکند که دادههای موجود در هر سطر آن با استفاده از یک کاراکتر کاما یا ``,`` از یکدیگر تفکیک شدهاند. این ساختار در موارد ذخیره اطلاعات یا گزارشها بر روی فایل بسیار رایج است. به نمونه فایل زیر توجه نمایید::
+
+ name,family,age,gender,final_grade
+ John,Doe,21,Male,87
+ Jane,Smith,19,Female,95
+ Tom,Lee,20,Male,78
+
+سطر یکم، سرآیند (Header) اختیاری است.
+
+در پایتون میتوان به سادگی با استفاده از ماژول ``csv`` [`اسناد پایتون `__] از کتابخانه استاندارد آن، با این نوع فایل کار کرد. البته ابزارهای دیگری نیز توسط دیگر کاربران پایتون توسعه داده شده است که در صورت نیاز یا علاقه میتوانید با کمی جستجو آنها را بیابید.
+
+
+.. _file-formats-json:
+
+JSON
+~~~~~~
+
+ساختار JavaScript Object Notation یا JSON [`ویکیپدیا `__] در تبادل داده بسیار رایج است. به خصوص در پیادهسازی سرویسها [`REST API `__]. این ساختار، دادهها را به شکل **کلید:مقدار** سازماندهی میکند و کاملا شبیه به ساختار شی دیکشنری در پایتون است. به نمونه فایل زیر توجه نمایید::
+
+
+ [
+ {
+ "name": "John",
+ "family": "Doe",
+ "age": 21,
+ "gender": "Male",
+ "final_grade": 87
+ },
+ {
+ "name": "Jane",
+ "family": "Smith",
+ "age": 19,
+ "gender": "Female",
+ "final_grade": 95
+ },
+ {
+ "name": "Tom",
+ "family": "Lee",
+ "age": 20,
+ "gender": "Male",
+ "final_grade": 78
+ }
+ ]
+
+همانطور که مشاهده میشود، هر بخش JSON کاملا شبیه به یک شی دیکشنری در پایتون است و در حالت لیست نیز مانند همان یک لیست از اشیا دیکشنری میباشد.
+
+
+در پایتون میتوان به سادگی با استفاده از ماژول ``json`` [`اسناد پایتون `__] از کتابخانه استاندارد آن، با این نوع فایل کار کرد. البته ابزارهای دیگری نیز توسط دیگر کاربران پایتون توسعه داده شده است که در صورت نیاز یا علاقه میتوانید با کمی جستجو آنها را بیابید.
|
@@ -794,6 +729,4 @@
:emoji-size:`😊` امیدوارم مفید بوده باشه
-`لطفا دیدگاه و سوالهای مرتبط با این درس خود را در کدرز مطرح نمایید. `_
-