美文网首页
python遍历读取文件并且正则

python遍历读取文件并且正则

作者: Abler | 来源:发表于2018-03-08 11:03 被阅读213次

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()

相关文章

  • python遍历读取文件并且正则

    1.最近由于笔者统计代码中的xxx功能,自己动手写了个python脚本.主要功能是通过读取某文件夹下面所有文件以及...

  • python-问题记录

    1、python读取excel 2、python遍历目录下所有子层级的文件 3、安装PIL报错pip3 insta...

  • python使用openpyxl和xlrd读写excel文件封装

    依赖包:openpyxlxlrd python版本:3.6.4 使用文档: 一、读取文件 1、遍历行 行的格式有两...

  • node遍历文件夹并读取文件内容

    先引入node原生方法 先选择要遍历的文件夹 读取文件列表 遍历每个文件 获取文件的本地路径 读取文件信息 判断是...

  • python 读取大文件,避免内存溢出

    ####python读取大文件 最近在学习python的过程中接触到了python对文件的读取。python读取文...

  • readme_for_solps

    shell脚本产生 b2plot数据文件 数据产生 scan:遍历器(指定需要读取数据的case,支持正则表达式检...

  • 2018-05-08

    # 1:首先对保存有网页源码的文件进行读取;# 2:利用正则表达式取出所有图片的连接;# 3:然后通过遍历将所有的...

  • Python 读取并替换整行文件

    Python 读取并替换整行文件 1、python 读取文件 f = open(input_file_path...

  • python遍历文件夹下的文件

    python遍历文件夹下的文件 在读文件的时候往往需要遍历文件夹,python的os.path包含了很多文件、文件...

  • Kotlin 图片的保存与读取

    图片的保存 图片的读取 方式一 方式二 方式三 文件遍历 遍历某个文件下的所有图片文件

网友评论

      本文标题:python遍历读取文件并且正则

      本文链接:https://www.haomeiwen.com/subject/ifgefftx.html