يعد العمل مع البيانات جزءًا لا مفر منه من البرمجة، وباعتباري شخصًا غالبًا ما يجد نفسه غارقًا في تنسيقات الملفات المختلفة، فقد أقدر دائمًا كيف تعمل لغة Python على تبسيط العملية برمتها.
أحد تنسيقات الملفات التي تظهر بانتظام، خاصة في تحليل البيانات، هو ملف CSV.
يعد ملف CSV، أو القيم المفصولة بفواصل، تنسيقًا شائعًا لتبادل البيانات نظرًا لبساطته.
لحسن الحظ، تأتي بايثون مع وحدة مدمجة تسمى CSV، مما يجعل العمل مع هذه الملفات فعالا بشكل ملحوظ.
في هذه المقالة، سأشرح كيفية عمل وحدة CSV في Python، بدءًا من الاستخدام الأساسي وحتى التقنيات الأكثر تقدمًا التي يمكن أن توفر لك الكثير من الوقت عند معالجة البيانات.
قبل الغوص في وحدة CSV، لنبدأ بالفهم الأساسي لمعنى ملف CSV.
ملف CSV هو في الأساس ملف نصي عادي حيث يمثل كل سطر صفًا من البيانات، ويتم فصل كل قيمة بفاصلة (أو في بعض الأحيان محددات أخرى مثل علامات التبويب).
إليك مثال سريع لما قد يبدو عليه الأمر:
Name,Age,Occupation Alice,30,Engineer Bob,25,Data Scientist Charlie,35,Teacher
قد تتساءل عن سبب حاجتك إلى وحدة CSV عندما تكون ملفات CSV مجرد ملفات نصية يمكن قراءتها نظريًا باستخدام طرق معالجة الملفات القياسية في Python.
على الرغم من أن هذا صحيح، إلا أن ملفات CSV يمكن أن تحتوي على تعقيدات - مثل الفواصل المضمنة، وفواصل الأسطر داخل الخلايا، ومحددات مختلفة - والتي يصعب التعامل معها يدويًا.
تلخص وحدة CSV كل هذا، مما يتيح لك التركيز على بياناتك.
دعنا ننتقل إلى الكود.
العملية الأكثر شيوعًا التي ستقوم بها على ملف CSV هي قراءة محتوياته.
تعتبر وظيفة csv.reader() في الوحدة أداة سهلة الاستخدام لذلك.
إليك دليل خطوة بخطوة حول كيفية القيام بذلك.
القراءة الأساسية لملف CSV
import csv # Open a CSV file with open('example.csv', 'r') as file: reader = csv.reader(file) # Iterate over the rows for row in reader: print(row)
هذه هي أبسط طريقة لقراءة ملف CSV.
يُرجع csv.reader() عنصرًا قابلاً للتكرار، حيث يمنحك كل تكرار قائمة تمثل صفًا من الملف.
التعامل مع الرؤوس
تأتي معظم ملفات CSV مع رؤوس في الصف الأول، مثل أسماء الأعمدة.
إذا لم تكن بحاجة إلى هذه الرؤوس، يمكنك ببساطة تخطي الصف الأول عند التكرار:
import csv with open('example.csv', 'r') as file: reader = csv.reader(file) # Skip header next(reader) for row in reader: print(row)
أحيانًا، أعمل مع ملفات تحتوي على مزيج من البيانات المفيدة وغير ذات الصلة، وأجد نفسي أتخطى الصفوف بناءً على أكثر من مجرد الرأس.
يمكنك القيام بذلك بسهولة داخل حلقة for.
DictReader: طريقة أكثر سهولة لقراءة ملفات CSV
إذا كان ملف CSV الخاص بك يحتوي على رؤوس، فإن csv.DictReader() يعد خيارًا رائعًا آخر يقرأ كل صف كقاموس، مع كون المفاتيح هي أسماء الأعمدة:
import csv with open('example.csv', 'r') as file: reader = csv.DictReader(file) for row in reader: print(row)
يمكن أن يجعل هذا الأسلوب التعليمات البرمجية الخاصة بك أكثر قابلية للقراءة وبديهية، خاصة عند العمل مع مجموعات البيانات الكبيرة.
على سبيل المثال، يبدو الوصول إلى الصف['Name'] أكثر وضوحًا من التعامل مع الوصول المستند إلى الفهرس مثل الصف[0].
بمجرد قراءة بياناتك ومعالجتها، فمن المحتمل أنك ستحتاج إلى حفظها أو تصديرها.
وظيفة csv.writer() هي الأداة التي تستخدمها للكتابة إلى ملفات CSV.
الكتابة الأساسية لملف CSV
import csv # Data to be written data = [ ['Name', 'Age', 'Occupation'], ['Alice', 30, 'Engineer'], ['Bob', 25, 'Data Scientist'], ['Charlie', 35, 'Teacher'] ] # Open a file in write mode with open('output.csv', 'w', newline='') as file: writer = csv.writer(file) # Write data to the file writer.writerows(data)
تأخذ الدالة write.writerows() قائمة من القوائم وتكتبها في ملف CSV، حيث تمثل كل قائمة داخلية صفًا من البيانات.
DictWriter: طريقة أنظف لكتابة ملفات CSV
تمامًا كما لدينا DictReader لقراءة ملفات CSV في القواميس، لدينا DictWriter لكتابة القواميس إلى ملف CSV.
يمكن أن تكون هذه الطريقة مفيدة بشكل خاص عندما تريد تحديد أسماء الأعمدة بشكل صريح.
import csv # Data as list of dictionaries data = [ {'Name': 'Alice', 'Age': 30, 'Occupation': 'Engineer'}, {'Name': 'Bob', 'Age': 25, 'Occupation': 'Data Scientist'}, {'Name': 'Charlie', 'Age': 35, 'Occupation': 'Teacher'} ] # Open file for writing with open('output.csv', 'w', newline='') as file: fieldnames = ['Name', 'Age', 'Occupation'] writer = csv.DictWriter(file, fieldnames=fieldnames) # Write the header writer.writeheader() # Write the data writer.writerows(data)
باستخدام DictWriter، يمكنك الحصول على واجهة جميلة ونظيفة لكتابة القواميس إلى ملف CSV مع الحفاظ على التعليمات البرمجية الخاصة بك قابلة للقراءة وموجزة.
افتراضيًا، تستخدم وحدة CSV الفواصل لفصل القيم، ولكن في بعض الأحيان قد تعمل مع ملفات تستخدم محددات أخرى، مثل علامات التبويب أو الفواصل المنقوطة.
توفر وحدة CSV طريقة سهلة للتعامل مع هذه الحالات عن طريق تحديد الوسيطة المحددة.
import csv with open('example_tab.csv', 'r') as file: reader = csv.reader(file, delimiter='\t') for row in reader: print(row)
لقد صادفت ملفات CSV تستخدم الفواصل المنقوطة بدلاً من الفواصل - عادةً من مصادر أوروبية - ومن المريح معرفة أن وحدة CSV في Python تتعامل مع هذا الأمر بسهولة.
سواء كان الأمر يتعلق بفواصل أو علامات تبويب أو أي محدد آخر، فإن وحدة CSV ستوفر لك كل ما تحتاجه.
ماذا لو كانت بياناتك تحتوي على فواصل داخل الحقول أو علامات الاقتباس أو حتى فواصل الأسطر؟
تتعامل وحدة CSV تلقائيًا مع مثل هذه الحالات باستخدام آليات الاقتباس.
يمكنك أيضًا التحكم في كيفية عمل الاقتباس باستخدام معلمة الاقتباس.
import csv data = [ ['Name', 'Occupation', 'Description'], ['Alice', 'Engineer', 'Works on, "cutting-edge" technology'], ['Bob', 'Data Scientist', 'Loves analyzing data.'] ] with open('complex.csv', 'w', newline='') as file: writer = csv.writer(file, quoting=csv.QUOTE_ALL) writer.writerows(data)
في هذا المثال، يضمن QUOTE_ALL أن كل حقل ملتف بين علامتي اقتباس.
تتضمن خيارات الاقتباس الأخرى csv.QUOTE_MINIMAL، وcsv.QUOTE_NONNUMERIC، وcsv.QUOTE_NONE، مما يتيح لك التحكم الكامل في كيفية تنسيق بيانات CSV الخاصة بك.
على مر السنين، أصبحت أعتمد على تنسيق CSV باعتباره وسيلة خفيفة الوزن وفعالة لنقل البيانات، وكانت وحدة CSV في Python رفيقًا موثوقًا به في تلك الرحلة.
سواء كنت تتعامل مع جداول بيانات بسيطة أو حقول بيانات معقدة ومتعددة الأسطر، فإن هذه الوحدة تجعل العملية تبدو بديهية وسهلة.
على الرغم من أن العمل مع ملفات CSV قد يبدو وكأنه مهمة عادية في البداية، إلا أنه يمثل بوابة لإتقان معالجة البيانات.
من خلال خبرتي، بمجرد التغلب على ملفات CSV، ستجد نفسك تتعامل بثقة مع تنسيقات أكبر وأكثر تعقيدًا مثل قواعد بيانات JSON أو SQL. بعد كل شيء، كل شيء يبدأ بالأساسيات.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3