1.最近由于笔者统计代码中的xxx功能,自己动手写了个python脚本.主要功能是
通过读取某文件夹下面所有文件以及子文件夹文件的内容,然后用正则表达式进行正则,将正则后的内容保存到本地(保存的文件名和源文件名一致).
如果有需求请自行合并文件
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os
import re
fileNames = "/Users/ex/Downloads/m" #文件夹
regString = "\[ToastView.*?\];" #正则表达式
out_file_dir = "/Users/ex/Downloads/mm/" #输出文件夹
def regularFile(fileStr,regStr,outFilePath):#输入文件夹,正则,输出文件夹
fileOpen1 = open(fileStr)
file_name_list = fileStr.split("/")#分割文件路径
out_file_name = outFilePath + "/" + file_name_list[len(file_name_list) - 1]#输出文件名
txt = fileOpen1.read()#读取文件内容
searchResult = re.findall(regStr,txt)
if len(searchResult):#正则表达式结果判断
endstr = ""
for result in searchResult:
endstr = endstr + result + "\n"
fileOpen2 = open(out_file_name,"w")
fileOpen2.write(endstr)#写入新的文件
fileOpen1.close()
fileOpen2.close()
#定义一个函数,path为你的路径; 返回所有文件和子文件路径,
def traversalDir_FirstDir(path):
list1 = os.walk(path)
fileList = []
for root, dirs, files in os.walk(path, topdown=False):
for name in files:
full_path = os.path.join(root, name)
if not(os.path.isdir(full_path)):#不是目录
fileList.append(full_path)
for name in dirs:
full_path = os.path.join(root, name)
if not(os.path.isdir(full_path)):#不是目录
fileList.append(full_path)
return fileList
allFileList = traversalDir_FirstDir(fileNames)#获得所有文件路径
for filepath in allFileList:
if ".m" in filepath:
regularFile(filepath,regString,out_file_dir)
/*!
* 遍历读取文件并且正则 nodejs版本
* Released under the MIT license
*
* Date: 2018-03-08
*/
const filesystem = require("fs");
const fileDir = walk("/Users/ex/Downloads/demo");// 路径
const regx = /da/g;// 正则没有 ''
/**
* 异步操作将正则结果写入文件
*/
/*regularFile(fileDir,/da/g,function (array) {
if (array == null) {
return;
}
writeToLocalFile(array,"a.txt")
});*/
/**
* 同步操作将正则结果写入文件
*/
const regxFileArray = regularFileSync(fileDir,regx);
writeToLocalFile(regxFileArray,"a.txt")
/**
* 同步读取文件
* @param {文件数组} fileArray
* @param {正则表达式} regx
*/
function regularFileSync(fileArray,regx) {
let arr = [];
for (let index = 0; index < fileArray.length; index++) {
const element = fileArray[index];// 文件路径名
const data = filesystem.readFileSync(element,"utf-8");
const stringOfFile = data.toString();
const newString = matchStr(regx,stringOfFile);
arr = arr.concat(newString);
}
return arr;
}
/**
* 异步读取文件并且正则
* @param {文件数组} fileArray
* @param {正则表达式} regx
* @param {回调函数} func_regx_txt
*/
function regularFile(fileArray,regx,func_regx_txt) {
for (let index = 0; index < fileArray.length; index++) {
const element = fileArray[index];// 文件路径名
filesystem.readFile(element,function (err,data) {
if (err) return console.error(err);
const stringOfFile = data.toString(); // 字符串
func_regx_txt(matchStr(regx,stringOfFile)); // 匿名函数
})
}
}
/**
* 遍历目录
* @param {需要遍历的目录} dir
*/
function walk(dir) {
var children = []
filesystem.readdirSync(dir).forEach(function(filename){
var path = dir+"/"+filename
var stat = filesystem.statSync(path)
if (stat && stat.isDirectory()) {
// 由于有递归不能用箭头函数
children = children.concat(walk(path))
}
else {
children.push(path)
}
})
return children
}
/**
* 正则
* @param {正则表达式} regx
* @param {需要正则的字符串} string
*/
function matchStr(regx,string) {
const res = string.match(regx);
return res;
}
/**
* 将数组转为字符串 \n连接 写入本地文件
* @param {数组} arr
* @param {文件路径} filePath
*/
function writeToLocalFile(arr, filePath) {
const txt = arr.join("\n");
filesystem.writeFile(filePath,txt,"utf-8",(err) => {
//写入错误,抛出错误
if (err) throw err;
})
}
源文件
正则之后文件
2.替换字符串功能
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os,base64
openSourcesFile = open('/Users/ex/Downloads/1.txt')#打开源文件
txtDesFile = open('/Users/ex/Downloads/2.txt','w')#打开需要写入的文件
sourcesTxt = openSourcesFile.read()#读入文件
replaceTxt = sourcesTxt.replace('\n','')
txtDesFile.write(replaceTxt)#写入txt文件
imgdata=base64.b64decode(replaceTxt)
fileDes=open('/Users/ex/Downloads/b.jpg','wb')#写入图片文件
fileDes.write(imgdata)
#关闭文件
fileDes.close()
openSourcesFile.close()
txtDesFile.close()
网友评论