python学习笔记 - 如何从几千个文件中寻找出指定的内容

2023-11-18

今天在处理数据时遇到这么个问题,如何从几千个txt文件中找到我想要的内容呢?

这是我的实现思路。

  1. 读取文件
  2. 选中指定的内容段
  3. 在新路径下保存内容段并命名为之前的文件名

以下是用python实现的代码。有详细注释!

#!/usr/bin/env python3
# -*- coding: utf-8 -*- 


import os
import re

regtxt = r'.+?\.txt' #扫描对象为txt文件.
regcontenthead = r'<!-- ========== METHOD SUMMARY =========== -->'  #找出指定的开头
regcontentend = r'</table>'                 #找到指定的结尾

class FileException(Exception):
    pass

def getdirlist(filepath):
    """获取目录下所有的文件."""

    txtlist = [] #文件集合.
    txtre = re.compile(regtxt)
    needfile = [] #存放结果.
    for parent, listdir, listfile in os.walk(filepath):
        for files in listfile:
            #获取所有文件.
            istxt = re.findall(txtre, files)
            filecontext = os.path.join(parent, files)
            #获取非空的文件.
            if istxt :
                txtlist.append(filecontext)                
                
                #将所有的数据存放到needfile中.
                needfile.append(readfile(filecontext)) 
                #print('needflie:', needfile)
				
				

    if needfile == []:
        raise FileException("no file can be find!")
    else:
        #print('needfile:',needfile)
        
        validatedata = getvalidata(needfile)
        #print ('validatedata', validatedata)
        
        print ('total file %s , validate file %s.' %(len(txtlist),len(validatedata)))

def getvalidata(filelist=[]):
    """过滤集合中空的元素."""

    valifile = []
    for fp in filelist:
        if fp != None:
            valifile.append(fp)
    return valifile

def readfile(filepath):
    """通过正则匹配文本中内容,并返回文本."""

    flag = False
    contentrehead = re.compile(regcontenthead)          #regcontenthead = r'<!-- ========== METHOD SUMMARY =========== -->' 
    contentrend = re.compile(regcontentend)
    
    fp = open(filepath, 'r', encoding='UTF-8')
    
    str1 = "LCP_Read"
    str2 = "LCP_Write" 
    Newfilepath = filepath.replace(str1, str2)        #保存到新的路径
    fpWrite = open(Newfilepath, "a+")
    
    lines = fp.readlines()
    #print('lines:', lines)
    
    flines = len(lines)
    #print('flines:', flines)
    
    #逐行匹配数据.
    for i in range(flines): 
        iscontenthead = re.findall(contentrehead, lines[i]) 
        j = i
        if iscontenthead:
            for j in range(flines):
                if j < i:
                    continue
                else:
                    iscontentend = re.findall(contentrend, lines[j])
                    fpWrite.write(lines[j])     #把指定的内容写入文件
                    
                    if iscontentend:
                        fp.close()
                        fpWrite.close()
                        #print('filepath', filepath)
                        return filepath                       
            
                                     

if __name__ == "__main__":
    getdirlist('C:\\Users\\Dandelion\\Desktop\\LCP_Read')
    
    
    
    
    

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python学习笔记 - 如何从几千个文件中寻找出指定的内容 的相关文章

随机推荐

  • 使用python和snapshot备份ElasticSearch索引数据

    该python备份snapshot的索引数据脚本 通过Elasticsearch连接es 然后通过es indices get alias函数获取所有索引名称 通过列表的startswith函数剔除 开头的自带索引名称 然后把所有索引名称放
  • 多边形的面积

    1 三角形面积 xy平面内 有三角形123 如下图所示 图1 借助矢量叉积和点积 这个三角形的面积公式非常简单 这个面积是有符号的 1 2 3逆时针排列 则面积为正 1 2 3顺时针排列 则面积为负 这是对右手系的总结 如果从背面看这个坐标
  • 11月11日 自定义Events,将自定义Events分配给UI,给UI添加动画 UE4斯坦福 学习笔记

    自定义Events 在AttributeComponent的 h头文件上加上代码 自定义Event DECLARE DYNAMIC MULTICAST DELEGATE FourParams FOnHealthChanged AActor
  • 思科模拟器简单校园网设计,期末作业难度

    文章简介 本文用思科模拟器设计和规划了一个校园网络 相当于计算机网络相关专业期末作业难度 作者简介 网络工程师 希望能认识更多的小伙伴一起交流 可私信或QQ号 1686231613 一 网络需求分析 1 学校建有办公室 实验室 教学楼 学生
  • 【STM32】RS485通信使用DMA串口发送数据出现数据丢失、断包问题排查方法

    最近在搞这个Modbus协议 由于485协议是半双工的 区别于RS 232的全双工 考虑不周导致调试modbus协议时候出了不少问题 第一 大多数开发板上的485芯片是MAX485 发送和接收状态的切换是通过IO给到这个两个引脚不同的电平进
  • win 11又更新,新功能简直绝了!

    很早之前 咱就知道微软下半年将会有一次大动作 没错 就是发布Win11 22H2正式版 之前有说过9月份发 现在也确实做到了 微软现在已经面向190多个国家 地区推送了Windows 11 22H2正式版更新 更新之后版本号为22621 5
  • linux中通过sed命令通过正则表达式过滤出中文[^[\u4E00-\u9FA5A-Za-z0-9_]+$]

    linux中通过sed命令通过正则表达式过滤出中文 sed r s u4E00 u9FA5A Za z0 9 lt gt 0 9 a z A Z g zz txt gt a txt
  • flutter listview 滚动到底部_(五) Flutter入门学习 之 Widget滚动

    列表是移动端经常使用的一种视图展示方式 在Flutter中提供了ListView和GridView 为了可能展示出更好的效果 我这里提供了一段Json数据 所以我们可以先学习一下Json解析 一 JSON读取和解析 在开发中 我们经常会使用
  • sql注入原理及解决方案

    sql注入原理就是用户输入动态的构造了意外sql语句 造成了意外结果 是攻击者有机可乘 SQL注入 SQL注入 就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串 最终达到欺骗服务器执行恶意的SQL命令 比如先前的很多
  • 随机练习题:浅浅固定思路

    1 牛牛的10类人 2 牛牛的四叶玫瑰数 3 牛牛的替换 4 牛牛的素数判断 笔者开头感想 如今大部分高校已经开学 当然笔者也不列外 但是由于疫情的原因 笔者被迫在家上网课学习 一脸忧愁 而这恰恰给了笔者自学的机会 相信笔者会加油滴 按照时
  • Acwing-4366. 上课睡觉

    假设最终答案为每堆石子均为cnt个 cnt一定可以整除sum 石子的总数 我们可以依次枚举答案 sum小于等于10 6 所以cnt的数量等于sum约数的个数 10 6范围内 约数最多的数为720720 它的约数个数有240个 int范围内
  • 单边带(SSB)调制技术

    文章目录 单边带 SSB 调制技术 1 双边带简述 2 单边带调制 单边带 SSB 调制技术 1 双边带简述 首先简述一下双边带调制 所谓双边带 DSB double sideband 调制 本质上就是调幅 时域上将基带信号x t 和高频载
  • pytorch FX模型静态量化

    文章目录 前言 一 pytorch静态量化 手动版 踩坑 二 使用FX量化 1 版本 2 代码如下 总结 前言 以前面文章写到的mobilenet图像分类为例 本文主要记录一下pytorchh训练后静态量化的过程 一 pytorch静态量化
  • 特征工程完全总结(Python源码)

    https www jianshu com p 114385e5a757
  • 【Linux】多线程的互斥与同步

    需要云服务器等云产品来学习Linux的同学可以移步 gt 腾讯云 lt gt 阿里云 lt gt 华为云 lt 官网 轻量型云服务器低至112元 年 新用户首次下单享超低折扣 目录 一 线程冲突 二 重入与线程安全 1 线程不安全的情况 2
  • svg php,如何加载使用PHP生成的SVG文件?

    我想用 PHP创建一个SVG文件 然后将其包含在HTML文件中 这是我到目前为止 this tutorial之后 svg php header Content type image svg xml gt p gt http www w3 o
  • Session、Token、Cookie的区别及实际使用

    在现代Web开发中 身份验证和会话管理涉及一些基本概念 如Session Token和Cookie 尽管它们都用于管理不同方面的Web会话 但它们之间的差异是很重要的 在本文中 我们将一一介绍Session Token和Cookie的定义
  • 空间直角坐标系右手系和左手系的判定方法及绕轴旋转的正方向

    1 判定坐标系 右手大拇指指向z轴方向 其余四指由x轴握向y轴方向 如果成功 那么判定为右手系 左手大拇指指向z轴方向 其余四指由x轴握向y轴方向 如果成功 那么判定为左手系 坐标系的种类判断成功 那么接下来该判断旋转正方向 2 旋转正方向
  • Linux常用基本操作命令详解(一)

    Linux实用命令 1 前 言 2 常用Linux命令 2 1 常用的系统工作命令 2 2 系统状态检测命令 2 3 工作目录切换命令 3 小结 4 复习巩固题 参考资料 1 前 言 最近学习了有关Linux的一些常用基本命令 在此做个简单
  • python学习笔记 - 如何从几千个文件中寻找出指定的内容

    今天在处理数据时遇到这么个问题 如何从几千个txt文件中找到我想要的内容呢 这是我的实现思路 读取文件 选中指定的内容段 在新路径下保存内容段并命名为之前的文件名 以下是用python实现的代码 有详细注释 usr bin env pyth