一、读取文件

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. adb移动端测试

    1. Android介绍 Android 是google公司主导的一个开放的手机操作系统,不过目前已经超过了手机的局限,而定位于移动设备的操作系统. Android一词的本义指“机器人”,取名原因很简 ...

  2. LeetCode之有效括号

    class Solution:    def isValid(self,s):         #第一步,if 判断传入为空的情况        if s == "":      ...

  3. LigerUi自动检索输入

    var availableTags = [ "ActionScript", "AppleScript", "Asp", "BASI ...

  4. vue-element分页

    <template> <card-layout :title="L('Users')" :actions="actions" @click=& ...

  5. [django]form的content-type(mime)

    form默认的content-type是 'application/x-www-form-urlencoded' 可以修改为多文档: enctype即为mime类型 <form action=& ...

  6. Java 基础 常用API ( 正则表达式,Date类,DateFormat类,Calendar类 )

    正则表达式 正则表达式的概念 正则表达式(英语:Regular Expression,在代码中常简写为regex). 正则表达式是一个字符串,使用单个字符串来描述.用来定义匹配规则,匹配一系列符合某个 ...

  7. MySQL 基础 备份和恢复

    数据库备份 mysqldump [args] > file_name 例如:备份所有数据库 shell> mysqldump --all-databases > dump.sql # ...

  8. 【Java】-NO.16.EBook.4.Java.1.012-【疯狂Java讲义第3版 李刚】- JDBC

    1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.012-[疯狂Java讲义第3版 李刚]-  JDBC Style:EBook Series:Java ...

  9. [LeetCode] 130. Surrounded Regions_Medium tag: DFS/BFS

    Given a 2D board containing 'X' and 'O' (the letter O), capture all regions surrounded by 'X'. A reg ...

  10. linux 编译 'aclocal-1.14' is missing on your system

    centos编译出现:类似情况: $tar -xvf libpcap-1.0.0.tar.gz      $cd libpcap-1.0.0.tar.gz      $./configure      ...