Reading and Writing CSV Files in Node.js with node-csv
介绍
常见的开发任务是从文件读取数据。 常见的文件格式是
虽然您可以使用Node随附的
多个模块提供了诸如
安装node-csv
该模块由
如果您不需要全部套件,则可以逐个安装整个套件或每个套件。 让我们使用默认设置初始化一个Node项目:
1 | $ npm init -y |
然后,让我们安装整个
1 | $ npm install node-csv |
我们将使用包含以下内容的CSV文件:
1 2 3 4 | Account Name,Account Code,Type,Description Cash,101,Assets,Checking account balance Wages Payable,220,Liabilities,Amount owed to employes for hours not yet paid Rent expense,560,Expenses,Cost of occupied rented facilities during accounting period |
使用csv-parse读取CSV文件
要读取CSV文件,我们将使用
流+回调API
让我们创建一个名为
1 2 3 4 5 6 7 | 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); |
首先,我们导入本机文件系统模块(
我们可以设置的选项不是强制性的。 在大多数情况下,您将使用任何
分隔符选项默认为逗号
分隔符选项默认为逗号
强制转换选项默认为
columns选项用于指示是否要以对象文字形式生成记录。 默认情况下,此列设置为
最后,我们使用
让我们运行这个文件:
1 | $ node index.js |
结果是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | [ { '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 employes for hours not yet paid' }, { 'Account Name': 'Rent expense', 'Account Code': '560', Type: 'Expenses', Description: 'Cost of occupied rented facilities during accounting period' } ] |
例如,您可以操纵这些数据,使用这些字段中的信息构造对象,或者将它们保存到数据库中,而不仅仅是打印内容。
使用同步API
让我们使用Sync API复制此功能:
1 2 3 4 5 6 7 | 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) })(); |
同样,我们从
然后,我们创建一个
然后,我们可以创建一个
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | [ { '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 employes for hours not yet paid' }, { 'Account Name': 'Rent expense', 'Account Code': '560', Type: 'Expenses', Description: 'Cost of occupied rented facilities during accounting period' } ] |
使用CSV Stringify写入CSV文件
与读取类似,有时我们希望将数据写成CSV格式。 为此,我们将使用
假设您有一些想要以CSV文件形式记录的JSON内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | 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":"Portugese" } ] |
尽管
在将其写入文件之前,让我们继续对上面的数据进行字符串化:
1 2 3 4 5 6 7 8 | var fs = require('fs'); var stringify = require('csv-stringify'); stringify(someData, { header: true }, function (err, output) { fs.writeFile(__dirname+'/someData.csv', output); }) |
在这里,我们要导入
其他选项,例如
运行此代码将生成具有正确内容的文件:
结论
在使用Node.js将数据写入文件之前,我们已经使用