CSV در حال حاضر یکی از ساده ترین فرمت های داده است، اما Node.js کار با آن را آسان تر می کند.
فایلهای CSV یک فرمت مناسب برای ذخیرهسازی داده هستند و میتوانید از آنها در پروژههای Node.js خود برای مدیریت هر چیزی از پیکربندی گرفته تا دادههای خام استفاده کنید. آنها می توانند اشتراک گذاری اطلاعات بین دو برنامه را ساده کنند، حتی اگر به زبان های مختلف نوشته شده باشند.
در Node.js می توانید از چندین روش برای خواندن و نوشتن فایل های CSV استفاده کنید.
این آموزش به شما نشان می دهد که چگونه از ماژول fs و بسته NPM fast-csv برای خواندن و نوشتن فایل های CSV استفاده کنید.
راه اندازی پروژه
برای دنبال کردن این آموزش، مطمئن شوید که Node.js را روی دستگاه خود نصب کرده اید. برای بررسی این دستور را اجرا کنید:
node -v
باید یک شماره نسخه برگرداند. اگر Node.js را نصب نکردهاید، دستورالعملهای این آموزش نصب را دنبال کنید تا این کار را انجام دهید.
در پوشه دلخواه خود، یک پوشه جدید به نام parse-csv ایجاد کنید.
mkdir parse-csv
به parse-csv بروید و یک فایل جدید ایجاد کنید. نام آن را parseCSV.js بگذارید.
cd parse-csv
touch parseCSV.js
اکنون می توانید کار با CSV را شروع کنید.
با استفاده از ماژول fs
ماژول fs (مخفف فایل سیستم) شامل چندین دستور برای تعامل با سیستم فایل در Node.js است.
کل فایل را یکباره بخوانید
دستورات readFile() و readFileSync() از ماژول fs شما را قادر می سازد محتوای فایل را در Node.js بخوانید. تفاوت بین این دستورات در این است که readFileSync() همزمان است – اجرای دیگر جاوا اسکریپت را مسدود می کند – در حالی که readFile() ناهمزمان یا غیر مسدود است.
از آنجایی که خواندن فایلهای CSV، بهویژه برای فایلهای حجیم، کمی زمان میبرد، اغلب بهتر است از دستور non-blocking، readFile()، مانند شکل زیر استفاده کنید.
const fs = require('fs');
fs.readFile('csvdemo.csv', 'utf8', function (err, data) {
/* parse data */
});
اگر نمونه فایل CSV ندارید، می توانید از mockaroo یک فایل ایجاد کنید. همچنین می توانید یاد بگیرید که چگونه خودتان یک فایل CSV ایجاد کنید.
خط به خط بخوانید
در حالی که readFile() کار می کند، حافظه فشرده است زیرا کل فایل CSV را یکجا می خواند. این یک مشکل است، به خصوص هنگام کار با فایل های CSV بزرگ. یک گزینه جایگزین خواندن یک خط در یک زمان با استفاده از دستور fs.createReadStream() است.
const fs = require("fs");
const readline = require("readline");
const stream = fs.createReadStream("./csvdemo.csv");
const rl = readline.createInterface({ input: stream });
let data = [];
rl.on("line", (row) => {
data.push(row.split(","));
});
rl.on("close", () => {
console.log(data);
});
در اینجا، شما نام فایل CSV را به fs.createReadStream() میفرستید تا یک جریان قابل خواندن ایجاد کنید. جریانها به شما امکان میدهند با حجم زیادی از دادهها کار کنید و به شما امکان میدهند به صورت تکهای به آن دسترسی داشته باشید.
هنگامی که جریان قابل خواندن را ایجاد کردید، آن را به متد ()readline.createInterface ارسال کنید. ماژول Readline یک رابط برای خواندن داده ها در یک خط در یک زمان فراهم می کند. اکنون میتوانید هر ردیف را هنگام خواندن به آرایه داده فشار دهید.
البته توجه داشته باشید که این کد به سادگی هر ردیف را روی کاما تقسیم می کند. اگرچه این با اساسی ترین فایل CSV کار می کند، فرمت آن در واقع پیچیده تر از نام آن است. تجزیه فایلهای CSV بهصورت دستی روشی قوی نیست، بهخصوص اگر خودتان کنترل دادهها را ندارید. برای اکثر مواقع، باید از کتابخانه CSV استفاده کنید.
استفاده از fast-csv
برای تجزیه مطمئن فایلهای CSV، میتوانید از کتابخانهای مانند fast-csv استفاده کنید که بهعنوان یک بسته npm در دسترس است. نه تنها خواندن فایل های CSV بلکه فرمت آنها را آسان تر می کند.
برای شروع، npm را مقداردهی اولیه کنید و fast-csv را نصب کنید.
npm init -y
npm i fast-csv
فایل های CSV را با استفاده از fast-csv به صورت زیر بخوانید.
const fs = require('fs')
const csv = require('fast-csv');
const data = []
fs.createReadStream('./csvdemo.csv')
.pipe(csv.parse({ headers: true }))
.on('error', error => console.error(error))
.on('data', row => data.push(row))
.on('end', () => console.log(data));
در کد بالا، با ایجاد یک جریان قابل خواندن از فایل CSV شروع کنید و سپس با استفاده از pipe() آن را به روش تجزیه از CSV سریع متصل کنید. توجه داشته باشید که گزینه headers را به ()csv.parse میدهید. این ردیف اول را رد می کند. اگر ردیف اول فایل CSV شما حاوی سرصفحه نباشد، هدرها را روی false تنظیم کنید.
همانطور که فایل CSV یک ردیف در یک زمان خوانده می شود، شما هر ردیف را به آرایه داده فشار می دهید. پس از خواندن کل فایل، می توانید محتویات آرایه داده را به دلخواه دستکاری کنید.
بیش از یک راه برای تجزیه یک CSV وجود دارد
فایلهای CSV برای ذخیره مجموعه دادههای بزرگ مفید هستند، زیرا تجزیه آنها آسان است. در Node.js می توانید از ماژول داخلی fs یا بسته های NPM استفاده کنید.
استفاده از کتابخانه ای مانند fast-csv بسیار ساده تر و قوی تر از نوشتن کد تجزیه و تحلیل خود به صورت دستی است. برخی از بسته های دیگر برای تجزیه CSV عبارتند از csv-parser و papa parser.