node 读取多个文件、合并多个文件、读写多个文件
一、读取文件
1、找文件中匹配的内容
let fs = require('fs')
let content = fs.readFileSync('/Users/**/desktop/Test.txt', 'utf-8')
console.log(content.match(/\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F]/g))
2、读取文件并合并两个文件内容
var fs = require('fs');
let content = fs.readFileSync('/Users/**/desktop/mark.log', 'utf-8')
fs.appendFile('/Users/caofan/desktop/Test.txt', content, function (err) {
if (err) throw err;
console.log('The "data to append" was appended to file!');
});
3.按行读取单个文件
var readline = require('readline');
var fs = require('fs');
var os = require('os');
var fReadName = '/Users/**/desktop/title/title_20171101.log';
var fWriteName = './emoji1.csv';
var fRead = fs.createReadStream(fReadName);
var fWrite = fs.createWriteStream(fWriteName);
var enableWriteIndex = true;
var objReadline = readline.createInterface({
input: fRead
});
var index = 1;
var matchArr = [];
objReadline.on('line', (line)=>{
if (enableWriteIndex) {
if(line.match(/\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F]/g)){
matchArr.push(index)
var tmp = line;
fWrite.write(tmp + os.EOL);
// if (matchArr.length <= 10) { //输出匹配的前10条
// console.log(line)
// // fs.writeFileSync(fWriteName, line+ '\n', 'utf8');
// var tmp = 'line' + matchArr.length + ':' + line;
// fWrite.write(tmp + os.EOL); // 将匹配的前10条写入另一个文件
// }
}
index ++;
}
});
fRead.on('end', ()=>{
enableWriteIndex = false;
console.log(matchArr.length) // 总共匹配的条数
});
objReadline.on('close', ()=>{
});
4. 合并目录下的多个文件到另一个文件
var fs = require("fs");
var path = require('path');
//配置远程路径
var remotePath = "./emoji"; // 相对路径
//读取文件目录
fs.readdir(remotePath,function(err,files){
if(err){
console.log(err);
return;
}
files.forEach(function(filename){
var filedir = path.join(remotePath,filename);
fs.stat(filedir,function(err, stats){
if (err) throw err;
if(stats.isFile()){
if(/emoji/.test(filename)) {
console.log(filename)
let content = fs.readFileSync(path.join(remotePath,filename), 'utf-8')
fs.appendFile('/Users/**/desktop/Test.txt', content)
}
} else if(stats.isDirectory()){
return false
}
});
});
});
5. 读取文件目录下的所有文件,匹配内容输出到新的文件
var fs = require('fs');
var readline = require('readline');
var path = require('path');
var os = require('os');
//解析需要遍历的文件夹
var filePath = path.resolve('/Users/**/desktop/title');
//调用文件遍历方法
fileDisplay(filePath);
var fWriteName = './emojis2.csv';
var matchArr = [];
var index = 1;
function fileDisplay(filePath){
//根据文件路径读取文件,返回文件列表
fs.readdir(filePath,function(err,files){
if(err){
console.warn(err)
}else{
//遍历读取到的文件列表
files.forEach(function(filename){
//获取当前文件的绝对路径
var filedir = path.join(filePath,filename);
//根据文件路径获取文件信息,返回一个fs.Stats对象
fs.stat(filedir,function(eror,stats){
if(eror){
console.warn('获取文件stats失败');
}else{
var isFile = stats.isFile();//是文件
var isDir = stats.isDirectory();//是文件夹
if(isFile){
if(/title_201711/.test(filename)) {
var fRead = fs.createReadStream(filedir);
var fWrite = fs.createWriteStream(fWriteName);
var enableWriteIndex = true;
var objReadline = readline.createInterface({ // 按行读取
input: fRead
});
objReadline.on('line', (line)=>{
if (enableWriteIndex) {
if(/[\]\{\}<>\[@【】「」#\*\^]/.test(line)){
matchArr.push(index)
if (matchArr.length <= 10000) {
var tmp = line;
console.log(line)
fWrite.write(tmp + os.EOL);
}
}
index ++;
}
});
objReadline.on('close', ()=>{
console.log(matchArr.length)
// console.log(index)
});
}
}
if(isDir){
fileDisplay(filedir);//递归,如果是文件夹,就继续遍历该文件夹下面的文件
}
}
})
});
}
});
当然,这些功能都能通过shell命令行实现。只是有时utf8编码问题导致正则在命令行匹配不到准确数据,所以在 node 中实现。
node 读取多个文件、合并多个文件、读写多个文件的更多相关文章
- 将Halcon导出的多个dxf文件合并成一个分图层的dxf文件
Halcon中可以通过concat_obj合并多个XLD,并且可以通过write_contour_xld_dxf再将XLD保存为.dxf文件.但是,保存后的.dxf文件用AutoCAD打开后发现,它们 ...
- 【转】Python编程: 多个PDF文件合并以及网页上自动下载PDF文件
1. 多个PDF文件合并1.1 需求描述有时候,我们下载了多个PDF文件, 但希望能把它们合并成一个PDF文件.例如:你下载的数个PDF文件资料或者电子发票,你可以使用python程序合并成一个PDF ...
- Hadoop MapReduce编程 API入门系列之小文件合并(二十九)
不多说,直接上代码. Hadoop 自身提供了几种机制来解决相关的问题,包括HAR,SequeueFile和CombineFileInputFormat. Hadoop 自身提供的几种小文件合并机制 ...
- Hive merge(小文件合并)
当Hive的输入由非常多个小文件组成时.假设不涉及文件合并的话.那么每一个小文件都会启动一个map task. 假设文件过小.以至于map任务启动和初始化的时间大于逻辑处理的时间,会造成资源浪费.甚至 ...
- xBIM 多个IFC文件合并
目录 xBIM 应用与学习 (一) xBIM 应用与学习 (二) xBIM 基本的模型操作 xBIM 日志操作 XBIM 3D 墙壁案例 xBIM 格式之间转换 xBIM 使用Linq 来优化查询 x ...
- 如何将两个PDF文件合并到一个页面中
在目前职场办公中,很多使用的文件格式是PDF文件格式,由于工作的需要,经常需要将PDF文件合并在一起,但由于PDF文件不能直接编辑修改,不能OFFICE,WPS那样,通过复制粘贴将两者合并,那如何解决 ...
- MR案例:小文件合并SequeceFile
SequeceFile是Hadoop API提供的一种二进制文件支持.这种二进制文件直接将<key, value>对序列化到文件中.可以使用这种文件对小文件合并,即将文件名作为key,文件 ...
- POI读写Word docx文件
使用POI读写word docx文件 目录 1 读docx文件 1.1 通过XWPFWordExtractor读 1.2 通过XWPFDocument读 2 写docx ...
- 使用POI读写word docx文件
目录 1 读docx文件 1.1 通过XWPFWordExtractor读 1.2 通过XWPFDocument读 2 写docx文件 2.1 直接通过XWPF ...
随机推荐
- lnmp/nginx系统真正有效的图片防盗链完整设置详解
http://www.it300.com/article-15345.html 关于nginx防盗链的方法网上有很多教程,都可以用,但是我发现很多教程并不完整,所做的防盗链并不是真正的彻底的防盗链! ...
- nodejs+websocket聊天工具
该聊天工具,使用nodejs起服务,websocket前端页面,聊天工具,,可以有任意多的人数参与聊天,里面的用户ID为模拟ID. 先上图 文件夹结构, 1.安装ws模块,npm install ws ...
- 数据分析与挖掘 - R语言:贝叶斯分类算法(案例三)
案例三比较简单,不需要自己写公式算法,使用了R自带的naiveBayes函数. 代码如下: > library(e1071)> classifier<-naiveBayes(iris ...
- php __FILE__ symlink
定义 __FILE__ 是一个魔法变量(预定义常量),当前运行文件的完整路径(真是文件路径,非软链路径)和文件名.如果用在被包含文件中,则返回被包含的文件名. 官方解释: __FILE__ 文件的 ...
- (转载)spring单例和多例详解。如何在单例中调用多例对象
spring生成对象默认是单例的.通过scope属性可以更改为多例. <bean id="user" class="modle.User" scope=& ...
- template.js简单入门
template.js是一款开源的JavaScript模板引擎,用来渲染页面的. github地址 https://github.com/yanhaijing/template.js 下载templa ...
- bat cmd 删除文件或文件夹 删除注册表
@echo off rd "C:\Documents and Settings\Administrator\桌面\新建文件夹" del 是用来删除文件的,删除文件夹的命令是rd 注 ...
- MOG插件(葡萄牙语,略作翻译)
这次记录下MOG大神的插件,自从我发现了这个插件,似乎开启了一个新世界诶~~~ 网址 https://atelierrgss.wordpress.com 1. MOG_YuruYuri.js CARA ...
- Linux 查看磁盘或文件夹及文件大小
当磁盘大小超过标准时会有报警提示,这时如果掌握df和du命令是非常明智的选择. df可以查看一级文件夹大小.使用比例.档案系统及其挂入点,但对文件却无能为力. du可以查看文件及文件夹的大小. ...
- Sitecore CMS中如何命名项目名称
如何在Sitecore CMS中命名项目,以及配置命名限制,“显示名称”是什么以及如何使用它. 任何其他名称的项目 当创建Sitecore的项目,内容编辑器要求制作者为新建项目提供名称.输入的名称将其 ...