از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
خواندن و نوشتن فایل های CSV در Node.js با node-csv یک کار رایج توسعه خواندن داده ها از فایل ها است. یک فرمت رایج فایل، فرمت csv. است. در حالی که میتوانید فایلهای CSV را با استفاده از ماژول fs همراه با Node بخوانید و محتوای فایل را دریافت کنید، در بیشتر موارد، تجزیه و تبدیل بیشتر با استفاده از …
سرفصلهای مطلب
معرفی
یک کار توسعه رایج خواندن داده ها از فایل ها است. یک فرمت فایل رایج است .csv
قالب
در حالی که می توانید فایل های CSV را با استفاده از fs
ماژولی که با Node ارائه می شود و محتوای فایل را دریافت می کند، در بیشتر موارد، تجزیه و تبدیل بیشتر با کمک ماژول هایی که دقیقاً برای این منظور ساخته شده اند بسیار آسان تر است.
ماژول های متعدد چنین قابلیت هایی مانند neat-csv
یا csv-parser
بسته ها با این حال، در این مقاله، ما از آن استفاده خواهیم کرد node-csv
– مجموعه ای از بسته های CSV برای تولید، تجزیه، تبدیل و رشته سازی داده های CSV.
در حال نصب node-csv
ماژول شامل csv-generate
، csv-parse
، csv-transform
و csv-stringify
بسته ها
اگر به همه آنها نیاز ندارید، می توانید کل مجموعه یا هر بسته را یکی یکی نصب کنید. بیایید یک پروژه Node را با تنظیمات پیش فرض مقداردهی کنیم:
$ npm init -y
سپس، بیایید کل را نصب کنیم node-csv
سوئیت:
$ npm install csv
توجه داشته باشید: اگرچه سوئیت نامیده می شود node-csv
– بسته NPM مربوطه در واقع فراخوانی می شود csv
.
ما با یک فایل CSV با این محتویات کار خواهیم کرد:
Account Name,Account Code,Type,Description
Cash,101,Assets,Checking account balance
Wages Payable,220,Liabilities,Amount owed to employee for hours not yet paid
Rent expense,560,Expenses,Cost of occupied rented facilities during accounting period
خواندن فایلهای CSV با CSV-Parse
برای خواندن فایلهای CSV، از آن استفاده میکنیم csv-parse
بسته از node-csv
.
را csv-parse
بسته رویکردهای متعددی را برای تجزیه فایلهای CSV ارائه میکند – با استفاده از callbacks، جریان + callback و همچنین Sync و Async API. ما را پوشش خواهیم داد stream + callback API و همگام سازی API.
Stream + Callback API
بیایید یک فایل به نام ایجاد کنیم index.js
و a را بسازید parser
:
var fs = require('fs');
var parse = require('csv-parse');
var parser = parse({columns: true}, function (err, records) {
console.log(records);
});
fs.createReadStream(__dirname+'/chart-of-accounts.csv').pipe(parser);
اول ما import ماژول سیستم فایل بومی (fs
) و csv-parse
مدول. سپس، یک را ایجاد می کنیم parser
که یک شی را به صورت تحت اللفظی می پذیرد که شامل گزینه هایی است که می خواهیم تنظیم کنیم. آرگومان دوم تابع callback است که برای دسترسی به رکوردها استفاده می شود – یا فقط print در مورد ما آنها را بیرون بیاورند.
گزینه هایی که می توانیم تنظیم کنیم اجباری نیستند. در بیشتر موارد، شما از هر یک از آنها استفاده خواهید کرد delimiter
، cast
یا columns
گزینه ها:
-
را حائل، جداکننده گزینه پیشفرض کاما است
,
. اگر دادههای فایلی که میخواهید تجزیه کنید، از جداکننده دیگری مانند نیمکولون استفاده میکند;
، یا یک لوله|
، می توانید با این گزینه مشخص کنید. -
را قالب گزینه پیش فرض به
false
و برای نشان دادن اینکه آیا میخواهید رشتهها را به انواع دادههای اصلی آنها ارسال کنید یا خیر استفاده میشود. به عنوان مثال، ستونی که از فیلدهای تاریخ تشکیل شده است را می توان به a ریختDate
. -
را ستون ها گزینه این است که نشان دهد آیا می خواهید رکورد را به شکل لفظ شیء تولید کنید یا خیر. به طور پیش فرض، این ستون روی تنظیم شده است
false
و رکوردها توسط تجزیه کننده به شکل آرایه تولید می شوند. اگر تنظیم شودtrue
، تجزیه کننده نام ستون را از خط اول استنتاج می کند.
در نهایت، ما یک جریان خواندنی را با استفاده از آن باز کردیم fs
ماژول و شروع به لوله گذاری آن به تجزیه کننده کرد.
بیایید این فایل را اجرا کنیم:
$ node index.js
این نتیجه در:
(
{
'Account Name': 'Cash',
'Account Code': '101',
Type: 'Assets',
Description: 'Checking account balance'
},
{
'Account Name': 'Wages Payable',
'Account Code': '220',
Type: 'Liabilities',
Description: 'Amount owed to employee for hours not yet paid'
},
{
'Account Name': 'Rent expense',
'Account Code': '560',
Type: 'Expenses',
Description: 'Cost of occupied rented facilities during accounting period'
}
)
به جای اینکه فقط محتویات را چاپ کنید، می توانید این داده ها را دستکاری کنید، اشیاء را با اطلاعات این فیلدها بسازید یا آنها را در یک پایگاه داده ذخیره کنید.
استفاده از Sync API
بیایید این عملکرد را با استفاده از Sync API تکرار کنیم:
var fs = require('fs').promises;
var parse = require('csv-parse/lib/sync');
(async function () {
const fileContent = await fs.readFile(__dirname+'/chart-of-accounts.csv');
const records = parse(fileContent, {columns: true});
console.log(records)
})();
دوباره، ما در حال واردات هستیم fs
ماژول و Sync API از csv-parse
مدول.
سپس، ما در حال ایجاد یک async
تابع، که در آن محتویات فایل را توسط await
در پاسخ به readFile()
تابع.
سپس، می توانیم a ایجاد کنیم parser
که محتویات فایل را به عنوان آرگومان اول و یک شی را به معنای واقعی کلمه دوم می گیرد. این شی لفظی شامل گزینه هایی برای ایجاد تجزیه کننده است (ما تنظیم کرده ایم columns
به true
). این تجزیه کننده به یک متغیر ثابت اختصاص داده شده است و ما به سادگی print مطالب آن برای اختصار بیان می شود:
(
{
'Account Name': 'Cash',
'Account Code': '101',
Type: 'Assets',
Description: 'Checking account balance'
},
{
'Account Name': 'Wages Payable',
'Account Code': '220',
Type: 'Liabilities',
Description: 'Amount owed to employee for hours not yet paid'
},
{
'Account Name': 'Rent expense',
'Account Code': '560',
Type: 'Expenses',
Description: 'Cost of occupied rented facilities during accounting period'
}
)
نوشتن فایلهای CSV با استفاده از CSV Stringify
شبیه به خواندن، ما گاهی اوقات دوست داریم نوشتن داده ها را به فرمت CSV تبدیل کنید. برای این، ما از csv-stringify
بسته از node-csv
سوئیت رشته بندی فقط به این معنی است که ما برخی از داده ها (در مثال ما JSON) را به یک رشته تبدیل می کنیم. سپس این رشته در یک فایل با فرمت CSV نوشته می شود.
بیایید فرض کنیم برخی از محتویات JSON را دارید که می خواهید به عنوان یک فایل CSV یادداشت کنید:
var someData = (
{
"Country": "Nigeria",
"Population": "200m",
"Continent": "Africa",
"Official Language(s)": "English"
},
{
"Country": "India",
"Population": "1b",
"Continent": "Asia",
"Official Language(s)": "Hindi, English"
},
{
"Country": "United States of America",
"Population": "328m",
"Continent": "North America",
"Official Language": "English"
},
{
"Country": "United Kingdom",
"Population": "66m",
"Continent": "Europe",
"Official Language": "English"
},
{
"Country": "Brazil",
"Population": "209m",
"Continent": "South America",
"Official Language": "Portuguese"
}
)
را csv-stringify
بسته همچنین دارای چند گزینه API است، با این حال، Callback API یک راه بسیار ساده برای سختسازی دادهها، بدون نیاز به مدیریت رویدادها مانند Stream API ارائه میدهد.
بیایید قبل از نوشتن آن در یک فایل، دادههای بالا را به صورت رشتهبندی کنیم:
var fs = require('fs');
var stringify = require('csv-stringify');
stringify(someData, {
header: true
}, function (err, output) {
fs.writeFile(__dirname+'/someData.csv', output);
})
در اینجا، ما در حال واردات هستیم fs
و csv-stringify
ماژول ها سپس با استفاده از stringify()
تابع، دادههایی را که میخواهیم به رشته تبدیل کنیم، ارائه میکنیم. ما همچنین یک شی به معنای واقعی کلمه ارائه کرده ایم header
گزینه. در نهایت، یک تابع callback نیز وجود دارد که برای نوشتن محتویات در یک فایل استفاده می شود.
گزینه های دیگر مانند cast
، columns
و delimiter
نیز موجود هستند. در مورد ما، ما در حال تنظیم header
گزینه ای به true
تا به رشته ساز بگوییم نام ستون ها را در اولین رکورد تولید کند.
با اجرای این کد یک فایل با محتوای مناسب تولید می شود:
نتیجه
را node-csv
ماژول مجموعهای از ماژولهای کوچکتر است که برای خواندن/تجزیه، تبدیل و نوشتن دادههای CSV از و روی فایلها استفاده میشود.
ما استفاده کرده ایم csv-parse
ماژول برای خواندن فایل های CSV و csv-stringify
ماژول برای رشتهبندی دادهها قبل از نوشتن آن در یک فایل با استفاده از Node.js.
(برچسبها برای ترجمه)# جاوا اسکریپت
منتشر شده در 1403-01-20 02:28:07