一、读取文件

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 读取多个文件、合并多个文件、读写多个文件的更多相关文章

  1. 将Halcon导出的多个dxf文件合并成一个分图层的dxf文件

    Halcon中可以通过concat_obj合并多个XLD,并且可以通过write_contour_xld_dxf再将XLD保存为.dxf文件.但是,保存后的.dxf文件用AutoCAD打开后发现,它们 ...

  2. 【转】Python编程: 多个PDF文件合并以及网页上自动下载PDF文件

    1. 多个PDF文件合并1.1 需求描述有时候,我们下载了多个PDF文件, 但希望能把它们合并成一个PDF文件.例如:你下载的数个PDF文件资料或者电子发票,你可以使用python程序合并成一个PDF ...

  3. Hadoop MapReduce编程 API入门系列之小文件合并(二十九)

    不多说,直接上代码. Hadoop 自身提供了几种机制来解决相关的问题,包括HAR,SequeueFile和CombineFileInputFormat. Hadoop 自身提供的几种小文件合并机制 ...

  4. Hive merge(小文件合并)

    当Hive的输入由非常多个小文件组成时.假设不涉及文件合并的话.那么每一个小文件都会启动一个map task. 假设文件过小.以至于map任务启动和初始化的时间大于逻辑处理的时间,会造成资源浪费.甚至 ...

  5. xBIM 多个IFC文件合并

    目录 xBIM 应用与学习 (一) xBIM 应用与学习 (二) xBIM 基本的模型操作 xBIM 日志操作 XBIM 3D 墙壁案例 xBIM 格式之间转换 xBIM 使用Linq 来优化查询 x ...

  6. 如何将两个PDF文件合并到一个页面中

    在目前职场办公中,很多使用的文件格式是PDF文件格式,由于工作的需要,经常需要将PDF文件合并在一起,但由于PDF文件不能直接编辑修改,不能OFFICE,WPS那样,通过复制粘贴将两者合并,那如何解决 ...

  7. MR案例:小文件合并SequeceFile

    SequeceFile是Hadoop API提供的一种二进制文件支持.这种二进制文件直接将<key, value>对序列化到文件中.可以使用这种文件对小文件合并,即将文件名作为key,文件 ...

  8. POI读写Word docx文件

    使用POI读写word docx文件 目录 1     读docx文件 1.1     通过XWPFWordExtractor读 1.2     通过XWPFDocument读 2     写docx ...

  9. 使用POI读写word docx文件

    目录 1     读docx文件 1.1     通过XWPFWordExtractor读 1.2     通过XWPFDocument读 2     写docx文件 2.1     直接通过XWPF ...

随机推荐

  1. Git的安装和配置用户名和密码

    在Windows中进行安装.访问https://git-scm.com/,点击Downloads for Windows,我下载的是Git-2.16.2-64-bit.exe.都按照默认选项即可,其中 ...

  2. Github安全开源工具集合

    Scanners-Box是来自github平台的开源扫描仪的集合,包括子域枚举,数据库漏洞扫描程序,弱密码或信息泄漏扫描仪,端口扫描仪,指纹扫描仪和其他大型扫描仪,模块化扫描仪等.对于其他众所周知的扫 ...

  3. C语言strcasecmp()函数:判断字符串是否相等(忽略大小写)

    头文件:#include <string.h> 定义函数:int strcasecmp (const char *s1, const char *s2); 函数说明:strcasecmp( ...

  4. PHP三种访问控制模式(public、protected、private)解析

    参考:https://www.cnblogs.com/chbyl/p/7116591.html public:公有类型 在子类中可以通过self::var调用方法或属性,可以使用parent::met ...

  5. R语言的scale函数

    1.数据的中心化 所谓数据的中心化是指数据集中的各项数据减去数据集的均值. 例如有数据集1, 2, 3, 6, 3,其均值为3 那么中心化之后的数据集为1-3,2-3,3-3,6-3,3-3,即:-2 ...

  6. vector erase的错误用法

    直接写 a.erase(it)是错误的,一定要写成it=a.erase(it)这个错误编译器不会报错.而且循环遍历删除的时候,删除了一个元素,容器里会自动向前移动,删除一个元素要紧接着it--来保持位 ...

  7. selenium自定义find_element

    智能轮询元素是否显示: def isDisplayTimeOut(self,element,timeSes): """ 在指定时间内,轮询元素是否显示 :param el ...

  8. Lua之math

    Lua之math函数: 转载请注明出处:http://www.cnblogs.com/jietian331/p/8032555.html abs 取绝对值 math.abs(-15) 15 acos ...

  9. <6>Cocos Creator​​​​​​​调试

    高手在于调试,下面来谈Cocos Creator调试! 1. 网页平台调试 调试常见的三种形式为调试打印.运行时报错与断点调试,这里主要利用编辑器"VS Code"与"C ...

  10. VC2012+QT新建一个控制台程序

    1.新建一个项目,选择控制台程序 2.下一步.project setting 可以包含模块,可以再这选择也可以之后选择 3.配置工程属性 1)需要源码的话添加VC++目录里的源目录 2)包含头文件   ...