العمل مع CSV في Node.js: مكتبات csv-parser و csv-writer

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

العمل مع CSV في Node.js: مكتبات csv-parser و csv-writer



CSV (قيم مفصولة بفواصل) — أحد أكثر التنسيقات شيوعًا لتخزين وتبادل البيانات الجدولية. في نظام Node.js البيئي، توجد العديد من الأدوات للعمل مع هذا التنسيق. في هذه المقالة، سنستعرض مكتبتين من الأكثر ملاءمة وخفة: csv-parser للقراءة و csv-writer لكتابة ملفات CSV.



تثبيت المكتبات



للبدء، قم بتثبيت كلتا المكتبتين عبر npm:



npm install csv-parser csv-writer


قراءة ملفات CSV باستخدام csv-parser



تقوم مكتبة csv-parser بتحويل بيانات CSV إلى تدفق من كائنات JavaScript. تعمل استنادًا إلى Node.js Streams، مما يسمح بمعالجة فعالة حتى للملفات الكبيرة جدًا دون تحميلها بالكامل في الذاكرة.



مثال أساسي للقراءة



لننشئ ملفًا باسم users.csv بالمحتوى التالي:



name,age,cityآنا,28,موسكوإيفان,35,سانت بطرسبرغماريا,22,قازان


الآن لنقرأه باستخدام csv-parser:



const fs = require('fs');const csv = require('csv-parser');

const results = [];

fs.createReadStream('users.csv') .pipe(csv()) .on('data', (data) => results.push(data)) .on('end', () => { console.log('عدد السجلات المقروءة:', results.length); console.log('أول سجل:', results[0]); // الإخراج: { name: 'آنا', age: '28', city: 'موسكو' } });


تخصيص الفاصل والعناوين



يدعم csv-parser إعدادات متنوعة. على سبيل المثال، إذا كان ملف CSV الخاص بك يستخدم الفاصلة المنقوطة كفاصل:



fs.createReadStream('users.csv')  .pipe(csv({ separator: ';' }))  .on('data', (row) => console.log(row));


إذا لم يكن في الملف عناوين، يمكنك تحديدها يدويًا:



fs.createReadStream('data.csv')  .pipe(csv({ headers: ['id', 'product', 'price'] }))  .on('data', (row) => console.log(row));


كتابة ملفات CSV باستخدام csv-writer



تتيح مكتبة csv-writer إنشاء ملفات CSV من مصفوفات الكائنات. تدعم ترميزات وفواصل مختلفة.



إنشاء ملف CSV بسيط



const createCsvWriter = require('csv-writer').createObjectCsvWriter;

const csvWriter = createCsvWriter({ path: 'output.csv', header: [ { id: 'name', title: 'الاسم' }, { id: 'age', title: 'العمر' }, { id: 'city', title: 'المدينة' } ]});

const records = [ { name: 'آنا', age: 28, city: 'موسكو' }, { name: 'إيفان', age: 35, city: 'سانت بطرسبرغ' }, { name: 'ماريا', age: 22, city: 'قازان' }];

csvWriter.writeRecords(records) .then(() => console.log('تم إنشاء ملف CSV بنجاح'));


إعدادات إضافية لـ csv-writer



يمكنك تغيير فاصل الحقول، وإضافة BOM لعرض صحيح للسيريلية في Excel، وتحديد الترميز:



const createCsvWriter = require('csv-writer').createObjectCsvWriter;

const csvWriter = createCsvWriter({ path: 'output_utf8.csv', header: [ { id: 'name', title: 'الاسم' }, { id: 'age', title: 'العمر' } ], fieldDelimiter: ';', alwaysQuote: true, encoding: 'utf8'});


مثال عملي: تحويل JSON إلى CSV



غالبًا ما تظهر مهمة تحويل بيانات JSON إلى تنسيق CSV. إليك مثال كامل:



const fs = require('fs');const createCsvWriter = require('csv-writer').createObjectCsvWriter;

// البيانات المصدرconst jsonData = [ { id: 1, product: 'لابتوب', price: 75000, quantity: 10 }, { id: 2, product: 'فأرة', price: 1500, quantity: 50 }, { id: 3, product: 'لوحة مفاتيح', price: 3500, quantity: 30 }];

// إعداد كاتب CSVconst csvWriter = createCsvWriter({ path: 'products.csv', header: [ { id: 'id', title: 'المعرف' }, { id: 'product

توصيات