قراءة CSV دون فقد المعنى تبدأ بفهم حدود الحقول. يوضح RFC 4180 قواعد صيغة شائعة: الفاصلة تفصل الحقول، والحقل الذي يتضمن فاصلة أو سطرا جديدا أو علامة اقتباس يقتبس بعلامتي اقتباس مزدوجتين. [1]
الخلاصة السريعة
استخدم قارئا يفهم صيغة الملف والاقتباس، ثم تحقق من العناوين وعدد الحقول ومعنى كل عمود. القسمة النصية عند كل فاصلة قد تقطع قيمة واحدة إلى أجزاء، ولا يكفي فتح الملف دون رسالة خطأ.
- في صيغة المثال، الفاصلة داخل حقل محاط باقتباس جزء من قيمته؛ لا تنشئ عمودا إضافيا. [1]
- في سجل افتراضي لورق الطباعة، الحقول هي الوصف والكمية والوحدة؛ اربط القيم بعناوينها المتفق عليها.
- قارئ csv.reader المعتاد في Python يرجع حقولا نصية؛ لا يفترض نوعا عدديا لكل خلية دون إعداد خاص. [2]
- راجع سجلا معروفا وعدد الحقول ووحدة السجل بعد الاستيراد، واحفظ المصدر وإعدادات القراءة؛ قد تمتد قيمة مقتبسة عبر أسطر، لذلك عد الأسطر ليس بالضرورة عد السجلات.
كيف تبقى فاصلة داخل قيمة واحدة؟
يشرح RFC 4180 أيضا أن الاقتباس المزدوج داخل حقل مقتبس يكتب مضاعفا. [1]
نكتب سجلا افتراضيا بصيغة تستخدم الفاصلة الإنجليزية: "ورق, سميك",12,ورقة. قيمة الحقل الأول هي «ورق, سميك» كاملة. إذا قطعنا النص عند كل فاصلة بلا فهم الاقتباس، قسمنا الوصف نفسه قبل أن نصل إلى الكمية. هذه قراءة تعليمية للبنية، ولم نجرب ملف مستخدم أو ندع أن جميع الصيغ المنسوبة إلى CSV متطابقة.
إلى أي عنوان تنتمي كل قيمة؟
في مثالنا نعلن أن ترتيب الأعمدة هو الوصف، ثم الكمية، ثم الوحدة. يبين الجدول النتيجة المقصودة لهذا السجل الواحد؛ لا يمثل ثلاثة سجلات مستقلة.
إذا أرسل المصدر نسخة ثانية بترتيب الوحدة والكمية والوصف، فلا نعتمد مواقع القيم القديمة. نراجع العناوين أو عقد الملف. كما نحدد هل يوجد صف عناوين فعلا، بدلا من تحويله إلى مثال تدريب أو إسقاط أول سجل حقيقي بافتراض غير موثق. هذا قرار قراءة للبنية، لا استنتاج من اسم الملف وحده.
| العمود المتفق عليه | القيمة المقصودة | المعنى |
|---|---|---|
| الوصف | ورق, سميك | وصف واحد يتضمن فاصلة |
| الكمية | 12 | عدد الورقات في السجل |
| الوحدة | ورقة | وحدة العدد |
هل الحقول المقروءة أعداد جاهزة؟
تفيد وثائق Python أن csv.reader يرجع قائمة نصوص لكل سجل، دون تحويل آلي للنوع إلا عند استعمال خيار مثل QUOTE_NONNUMERIC. [2]
في مثال الورق، نحتاج اتفاقا أن «12» كمية قابلة للتحويل إلى عدد صحيح. أما الوصف والوحدة فيبقيان نصين. لا نستعمل التحويل نفسه لجميع الأعمدة لأن بعضها يبدو رقميا في سجل واحد. نفحص أيضا معنى خلية فارغة في عقد الملف؛ مجرد وصول سلسلة فارغة لا يحدد هل الكمية صفر أم مجهولة.
كيف نراجع النتيجة قبل استخدامها للنموذج؟
نقترح اختيار سجل معلوم من المصدر ومقارنة وصفه وكميته ووحدته بالناتج. نراجع وجود الحقول المطلوبة وأعدادها، ونتحقق من أن الفاصلة المقتبسة بقيت داخل الوصف. إذا فشل سجل، نحفظه للمراجعة بدلا من إسقاطه ثم إعلان أن الملف كامل.
نسجل إعداد الفاصل والاقتباس والعناوين ونوع الأعمدة ومسار النسخة الأصلية. وقد تضم قيمة مقتبسة سطرا جديدا، لذلك لا نجعل عد أسطر النص وحده عد السجلات. هذه خطة تحقق مقترحة؛ لم ننفذ استيرادا فعليا، ولا يضمن نجاح التحليل النصي أن الأعداد المسجلة تصف المخزون الصحيح.
المصادر ومتابعة القراءة
- RFC 4180: Common Format and MIME Type for CSV Files (يفتح في نافذة جديدة)rfc-editor.org
- Python: csv — CSV File Reading and Writing (يفتح في نافذة جديدة)docs.python.org
أُعدّ هذا المقال بصياغة عربية أصلية بالاستناد إلى المصادر أعلاه، وهو مدخل تمهيدي إلى الموضوع. اقرأ منهجية المحتوى وحدوده.
