العمل مع CSV في JavaScript (Node.js): المكتبات، التحليل وإنشاء البيانات

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

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

ابدأ الدورة

العمل مع CSV في JavaScript (Node.js): دليل شامل



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



المكتبات الشائعة للعمل مع CSV في Node.js



في JavaScript (Node.js)، تُستخدم ثلاث مكتبات بشكل شائع للعمل مع CSV:



  • csv-parser — محلل تدفقي سريع يعمل في وضع البث (streaming)
  • csv-stringify — مولد CSV من كائنات أو مصفوفات JavaScript
  • fast-csv — مكتبة شاملة تجمع بين التحليل والإنشاء


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



لتثبيت الحزم المطلوبة، استخدم npm:



npm install csv-parser csv-stringify fast-csv


تحليل CSV باستخدام csv-parser



تعمل مكتبة csv-parser في وضع البث، مما يسمح بمعالجة الملفات بأي حجم دون تحميلها بالكامل في الذاكرة.



مثال: قراءة ملف CSV



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

const results = [];

fs.createReadStream('data.csv') .pipe(csv()) .on('data', (row) => { results.push(row); }) .on('end', () => { console.log('تمت معالجة ملف CSV بنجاح'); console.log('الصف الأول:', results[0]); });


بشكل افتراضي، يستخدم csv-parser السطر الأول من الملف كعناوين ويعيد كائنات بمفاتيح مقابلة.



إنشاء CSV باستخدام csv-stringify



تتيح مكتبة csv-stringify إنشاء سلاسل CSV من مصفوفات أو كائنات JavaScript.



مثال: إنشاء CSV من كائنات



const { stringify } = require('csv-stringify');const fs = require('fs');

const data = [ { name: 'إيفان', age: 25, city: 'موسكو' }, { name: 'ماريا', age: 30, city: 'سانت بطرسبرغ' }, { name: 'أليكسي', age: 28, city: 'قازان' }];

const writableStream = fs.createWriteStream('output.csv');

const stringifier = stringify({ header: true, columns: ['name', 'age', 'city']});

stringifier.pipe(writableStream);data.forEach(row => stringifier.write(row));stringifier.end();


الحل الشامل: fast-csv



توفر fast-csv كلاً من التحليل والإنشاء لـ CSV، كما تدعم تنسيقات مختلفة (TSV، فواصل مخصصة).



مثال: تحليل CSV باستخدام fast-csv



const fs = require('fs');const csv = require('@fast-csv/parse');

const rows = [];

fs.createReadStream('data.csv') .pipe(csv.parse({ headers: true })) .on('error', error => console.error(error)) .on('data', row => rows.push(row)) .on('end', (rowCount) => { console.log(`تمت معالجة ${rowCount} صف`); console.log('البيانات:', rows); });


مثال: كتابة CSV باستخدام fast-csv



const fs = require('fs');const csv = require('@fast-csv/format');

const data = [ ['الاسم', 'العمر', 'المدينة'], ['إيفان', '25', 'موسكو'], ['ماريا', '30', 'سانت بطرسبرغ']];

const ws = fs.createWriteStream('output.csv');csv.write(data, { headers: true }).pipe(ws);


العمل مع الملفات الكبيرة والأداء



عند العمل مع ملفات CSV بحجم يتجاوز 100 ميجابايت، يُوصى باستخدام المعالجة التدفقية. جميع المكتبات الثلاث المذكورة تدعم التدفقات (streams).



مثال: معالجة ملف CSV كبير صفًا بصف



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

let rowCount = 0;

fs.createReadStream('large-file.csv') .pipe(csv()) .on('data', (row) => { rowC

توصيات