كيفية قراءة ملفات CSV في بايثون

إذا كنت تعمل كمطور خلفي أو عالم بيانات، فمن المحتمل أنك تعاملت بالفعل مع ملفات CSV. إنه أحد التنسيقات الأكثر استخدامًا للعمل مع البيانات ونقلها. يمكن للعديد من مكتبات بايثون التعامل مع ملفات CSV، ولكن في هذه المقالة، سنركز على وحدة CSV الخاصة ببايثون.

ما هي ملفات CSV؟

ملف CSV، المعروف أيضًا باسم ملف قيم مفصولة بفاصلة، هو ملف نصي يحتوي على سجلات البيانات. يمثل كل سطر سجلاً مختلفًا ويتضمن حقلاً واحدًا أو أكثر. تمثل هذه الحقول قيم بيانات مختلفة.

دعونا نلقي نظرة على بعض أمثلة CSV. يوجد أدناه مقتطف من ملف CSV يحتوي على بيانات الطالب:

firstname,lastname,class
Benjamin,Berman,2020
Sophie,Case,2018

السطر الأول هو الرأس، وهو في الأساس أسماء الأعمدة. سيكون لكل سطر نفس عدد الحقول كما يحتوي السطر الأول على أسماء الأعمدة. نحن نستخدم الفواصل كمحددات (أي لفصل الحقول في سطر).

لننظر إلى المثال الثاني:

firstname|lastname|class
Benjamin|Berman|2020
Sophie|Case|2018

يحتوي هذا المقتطف على نفس بنية الجزء الأول. الفرق هو المحدد: نحن نستخدم شريطًا رأسيًا. طالما أننا نعرف البنية العامة لملف CSV، يمكننا التعامل معه.

لماذا تعتبر ملفات CSV شائعة جدًا؟

ملفات CSV هي ملفات نصية عادية، مما يعني أنها بسيطة قدر الإمكان. وتسهل هذه البساطة إنشاء هذه الملفات وتعديلها ونقلها، بغض النظر عن النظام الأساسي. وبالتالي، يمكن نقل البيانات الجدولية (أي البيانات المنظمة كصفوف، حيث يصف كل صف عنصرًا واحدًا) بين البرامج أو الأنظمة التي قد تكون غير متوافقة.

فائدة أخرى لهذه البساطة هي أنه من السهل جدًا استيراد هذه البيانات إلى جداول البيانات وقواعد البيانات. بالنسبة لجداول البيانات، غالبًا ما يؤدي فتح ملف CSV إلى استيراد البيانات تلقائيًا إلى برنامج جداول البيانات.

أحد الاستخدامات الأكثر شيوعًا لملفات CSV هو عندما يلزم استخراج جزء من بيانات قاعدة البيانات ليستخدمها زميل عمل غير تقني. تسمح معظم أنظمة قواعد البيانات الحديثة للمستخدمين بتصدير بياناتهم إلى ملفات CSV. بدلاً من جعل الأشخاص غير التقنيين يعانون من خلال نظام قاعدة البيانات، يمكننا بسهولة منحهم ملف CSV يحتوي على البيانات التي يحتاجون إليها. يمكننا أيضًا بسهولة استخراج ملف CSV من جدول بيانات وإدراجه في قاعدة البيانات الخاصة بنا. وهذا يجعل التواصل بين الموظفين غير التقنيين وقواعد البيانات أسهل كثيرًا.

في بعض الأحيان، قد نعمل على ملفات CSV فعلية – على سبيل المثال. عندما يقوم فريق واحد بجمع البيانات وتسليمها إلى الفريق الذي من المفترض أن يعمل معها. الطريقة الأكثر شيوعًا لتسليم البيانات ستكون في ملف CSV. أو ربما نحتاج إلى الحصول على بعض البيانات من نظام قديم لا يمكننا التفاعل معه. الحل الأسهل هو الحصول على هذه البيانات بتنسيق CSV، حيث يسهل نقل البيانات النصية من نظام إلى آخر.

استخدام وحدة CSV في بايثون

هناك العديد من وحدات بايثون التي يمكنها قراءة ملف CSV، ولكن قد تكون هناك حالات لا نتمكن فيها من استخدام هذه المكتبات، بسبب قيود النظام الأساسي أو بيئة التطوير. لهذا السبب، سنركز على وحدة CSV المضمنة في Python. يوجد أدناه ملف CSV يحتوي على درجات طالبين:

Name,Class,Lecture,Grade
Benjamin,A,Mathematics,90
Benjamin,A,Chemistry,54
Benjamin,A,Physics,77
Sophie,B,Mathematics,90
Sophie,B,Chemistry,90
Sophie,B,Physics,90

يتضمن هذا الملف ستة سجلات. يحتوي كل سجل على اسم وفصل ومحاضرة وتقدير. يتم فصل كل حقل بفواصل. للعمل مع هذا الملف، سنستخدم دالة csv.reader()، التي تقبل كائنًا قابلاً للتكرار. في هذه الحالة، سوف نقوم بتزويده بكائن ملف. إليك الكود لطباعة كافة صفوف ملف Report.csv:

import csv
with open("Report.csv", "r") as handler:
 reader = csv.reader(handler, delimiter=',')
 for row in reader:
   print(row)

دعونا نحلل هذا الكود سطرًا تلو الآخر. أولاً، ثم نفتح ملف CSV وننشئ معالج ملف يسمى Handler. نظرًا لأن معالج الملف هذا عبارة عن كائن قابل للتكرار يقوم بإرجاع سلسلة كلما تم استدعاء التابع__next__ عليه، فيمكننا تقديمه كوسيطة في دالة Reader() والحصول على معالج CSV الذي نسميه Reader. والآن يمكننا التكرار على القارئ؛ سيكون كل عنصر منه عبارة عن قائمة حقول لكل سطر في ملف CSV الأصلي الخاص بنا.

ضع في اعتبارك أن ملف CSV يمكن أن يتضمن أسماء الحقول كسطره الأول. إذا علمنا أن هذه هي الحالة، فيمكننا استخدام دالة csv.DictReader() لإنشاء معالج. بدلاً من إرجاع قائمة لكل صف، ستقوم هذه الدالة بإرجاع قاموس لكل سطر. المفتاح لكل قاموس هو الأسماء الموجودة في السطر الأول من ملف CSV.

لهجات CSV وكيفية التعامل معها

على الرغم من أن CSV يرمز إلى “قيم مفصولة بفواصل”، إلا أنه لا يوجد معيار محدد لهذه الملفات. وبالتالي، يسمح لنا ملف CSV بتحديد لهجة CSV. تسرد دالة csv.list_dialects()‎ اللهجات المضمنة في وحدة CSV. بالنسبة لي، هذه هي Excel وExcel-Tab وUnix.

لهجة Excel هي الإعداد الافتراضي لملفات CSV المصدرة مباشرة من Microsoft Excel؛ المحدد الخاص به هو فاصلة. البديل من ذلك هو علامة excel-tab، حيث يكون المحدد علامة تبويب. يمكن الاطلاع على مزيد من المعلومات حول هذه اللهجات على صفحة PYTHON GITHUB.

إذا كانت شركتك أو فريقك يستخدم ملف CSV بنمط مخصص، فيمكنك إنشاء لهجة CSV الخاصة بك ووضعها في النظام باستخدام دالة Register_dialect(). راجع صفحة PYTHON GITHUB لمزيد من التفاصيل.

csv.register_dialect('myDialect',delimiter='|',
   skipinitialspace=True,
                    quoting=csv.QUOTE_ALL)

يمكنك بعد ذلك استخدام myDialect الجديد لقراءة ملف CSV:

import csv
with open("Report.csv","r") as handler:
 reader = csv.reader(handler, dialect="myDialect")

يعمل هذا كثيرًا مثل مثالنا السابق، ولكن بدلاً من توفير وسيطة للمحدد، فإننا ببساطة نعطي لهجتنا الجديدة كوسيطة.

نذكر هنا أننا نقوم بإنشاء لهجة تسمى “myDialect”. ستستخدم هذه اللهجة الشريط العمودي ( | ) كمحدد. ويشير أيضًا إلى أننا نريد تخطي أي مسافات بيضاء (مسافات فارغة) بعد المحددات وأن جميع القيم موجودة داخل علامات الاقتباس. هناك عدد قليل من المعلمات التي يمكن تعيينها؛ انظر الروابط أعلاه للحصول على التفاصيل.

ماذا لو كنا لا نعرف لهجة CSV؟

في بعض الأحيان لا نعرف لهجة ملف CSV. في مثل هذه الأوقات، يمكننا استخدام دالة csv.Sniffer():

header_exists  = csv.Sniffer().has_header(reader)
sniffed_dialect = csv.Sniffer().sniff(reader)

ترجع الدالة الأولى قيمة منطقية تشير إلى ما إذا كان هناك رأس. تقوم الدالة الثانية بإرجاع اللهجة كما تم العثور عليها بواسطة csv.Sniffer(). من المفيد دائمًا استخدام هذه الدوال عندما لا نعرف بنية ملف CSV.

الآن بعد أن تعرفت على ملفات CSV و بايثون

… أنت بحاجة إلى الممارسة! يعد تنسيق ملف CSV أحد أقدم طرق نقل البيانات وأكثرها شيوعًا. لا يمكننا ببساطة أن نأمل في تجنب ذلك عند العمل كعالم بيانات أو مهندس تعلم آلي. حتى مطورو الواجهة الخلفية يتعاملون مع ملفات CSV، إما عند تلقي البيانات أو عند كتابتها مرة أخرى إلى النظام لاستخدام بعض المكونات الأخرى.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

اكتشاف المزيد من بايثون العربي

اشترك الآن للاستمرار في القراءة والحصول على حق الوصول إلى الأرشيف الكامل.

Continue reading

Scroll to Top