大文件处理的终极武器:Yield详解

【大文件处理的终极武器:Yield详解】🚀

一、大文件处理的痛点

  • 内存限制
  • 数据量巨大
  • 传统方法效率低

二、Yield解决方案

def read_large_file(file_path):with open(file_path, 'r') as file:# 每次只读取一行,而不是全文for line in file:yield line.strip()# 使用示例
def process_log_file(file_path):# 内存友好的日志处理for line in read_large_file(file_path):# 实时处理每一行if 'ERROR' in line:print(f"发现错误日志:{line}")# 日志分析案例
def analyze_error_logs(file_path):error_count = 0for line in read_large_file(file_path):if 'ERROR' in line:error_count += 1return error_count

三、实战场景:海量日志分析

  1. 超大日志文件处理
def parse_massive_log(file_path):# 内存高效的日志解析with open(file_path, 'r') as file:for line in file:# 实时解析每一行try:# 假设日志格式:时间 | 级别 | 消息timestamp, level, message = line.split('|')# 只处理特定级别的日志if level.strip() == 'ERROR':yield {'time': timestamp.strip(),'message': message.strip()}except ValueError:# 处理格式不正确的行continue# 使用示例
def log_error_summary(file_path):error_summary = {}for error in parse_massive_log(file_path):# 统计每小时错误次数hour = error['time'].split()[1]error_summary[hour] = error_summary.get(hour, 0) + 1return error_summary# 调用
errors = log_error_summary('huge_server.log')
print(errors)

四、CSV大文件处理

import csvdef process_large_csv(file_path):with open(file_path, 'r') as file:reader = csv.DictReader(file)for row in reader:# 实时处理每一行yield process_row(row)def process_row(row):# 数据清洗和转换return {'name': row['name'].upper(),'score': float(row['score']) * 1.1}def analyze_student_data(file_path):total_scores = 0student_count = 0for processed_row in process_large_csv(file_path):total_scores += processed_row['score']student_count += 1return total_scores / student_count if student_count > 0 else 0

五、大文件去重

def deduplicate_file(input_file, output_file):# 内存高效的文件去重seen = set()with open(input_file, 'r') as infile, \open(output_file, 'w') as outfile:for line in infile:# 每次处理一行clean_line = line.strip()if clean_line not in seen:seen.add(clean_line)outfile.write(clean_line + '\n')# 防止去重集合过大if len(seen) > 10000:seen.clear()# 文件指纹去重
def find_duplicate_files(directory):import osimport hashlibdef file_hash(filepath):# 生成文件指纹hasher = hashlib.md5()with open(filepath, 'rb') as f:# 分块读取,避免一次性加载整个文件for chunk in iter(lambda: f.read(4096), b''):hasher.update(chunk)return hasher.hexdigest()# 生成器返回重复文件seen_hashes = set()for root, _, files in os.walk(directory):for filename in files:filepath = os.path.join(root, filename)file_fingerprint = file_hash(filepath)if file_fingerprint in seen_hashes:yield filepathelse:seen_hashes.add(file_fingerprint)

六、高级应用:流式数据处理

def process_streaming_data(data_source):# 模拟实时数据流处理for data_point in data_source:# 实时转换和过滤processed_data = transform(data_point)if is_valid(processed_data):yield processed_datadef transform(data):# 数据清洗转换return data.lower().strip()def is_valid(data):# 数据有效性验证return len(data) > 0

七、Yield的优势

  1. 内存效率高
  2. 实时处理
  3. 惰性计算
  4. 可中断、可恢复
  5. 适合大数据场景

八、最佳实践

  • 分块处理
  • 及时释放内存
  • 使用迭代器模式
  • 避免一次性加载全部数据

💡 学习建议:

  1. 理解生成器原理
  2. 掌握迭代器概念
  3. 实践大文件处理
  4. 关注内存优化

温馨提示:Yield就像数据处理的"省内存神器"!🌟 每一行代码都在为性能而战!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/63061.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot 学习

SpringBoot 学习 什么是 Springboot Spring Boot 是 Spring 提供的一个子项目,用于快速构建 Spring 应用程序 传统的问题: 导入依赖繁琐项目配置繁琐 SpringBoot 的特性 起步依赖:整合所有 web 的依赖配置好了自动配置:bean…

到达率的变化动态调整服务器的服务率,实现负载均衡,提高资源利用效率

中心可以根据任务到达率的变化动态调整服务器的服务率,实现负载均衡,提高资源利用效率 服务率和到达率 中心可以根据任务到达率的变化动态调整服务器的服务率,实现负载均衡,提高资源利用效率服务率(Service Rate)到达率(Arrival Rate)控制参数实现负载均衡的方法在云计…

最新全开源IM即时通讯系统源码(PC+WEB+IOS+Android)部署指南

全开源IM(即时通讯)系统源码部署是一个复杂但系统的过程,涉及多个组件和步骤。以下是一个详细的部署指南,旨在帮助开发者或系统管理员成功部署一个全开源的IM系统,如OpenIM。      IM即时通讯系统源码准备工作   …

CAD c# 生成略缩图预览

代码如下: using (Transaction tr currentdb.TransactionManager.StartTransaction()){//当前数据库开启事务using (Database tempdb new Database(false, true)) //创建临时数据库(两个参数:是否创建符号表,不与当前文档关联){try{Bitmap …

CloudberryDB(二) 演化路线图

CloudberryDB 制定了演化路线图(https://github.com/orgs/cloudberrydb/discussions/369)并在逐步改进,这是 Cloudberry Database 发挥独特价值之处。 计划、正在进行或已完成的一些工作。 支持轻松升级 PostgreSQL 内核版本。 原有 Greenp…

单片机:实现呼吸灯(附带源码)

单片机实现呼吸灯详细解读 呼吸灯是一种常见的灯光效果,广泛应用于电子产品、汽车、家居照明等领域。其基本特性是通过逐渐增亮和减弱的方式,使得灯光呈现出“呼吸”的效果,给人一种平缓、舒适的视觉感受。在嵌入式系统中,呼吸灯…

[面试题]--索引用了什么数据结构?有什么特点?

答:使用了B树: 时间复杂度:O(logN),可以有效控制树高 B树特点: 1.叶子节点之间有相互链接的作用,会指向下一个相近的兄弟节点。 MySQL在组织叶子节点使用的是双向链表 2.非叶子节点的值都保存在叶子节点当中 MySQL非叶…

ansible自动化运维(五)roles角色管理

Roles角色管理 角色(roles)是ansible自1.2版本开始引入的新特性,用于层次性,结构化地组织playbook。 roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即可。简单的…

操作系统:文件系统

目录 1、文件 概念: UNIX文件分类: 2、文件系统 3、文件的访问方式 顺序访问 随机访问 4、文件的组织 逻辑组织 物理组织 5、倒排结构(了解) 5、文件目录 文件控制块(FCB) ​编辑 目录项 单…

单元测试-FATAL ERROR in native method: processing of -javaagent failed

文章目录 前言单元测试-FATAL ERROR in native method: processing of -javaagent failed1. 报错信息2. 解决方案 前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。   而且听说点赞的人每天的运…

决策曲线分析(DCA)中平均净收益用于评价模型算法(R自定义函数)

决策曲线分析(DCA)中平均净收益用于评价模型算法 DCA分析虽然不强调用来评价模型算法或者变量组合的优劣,但是实际应用过程中感觉DCA曲线的走势和模型的效能具有良好的一致性,其实这种一致性也可以找到内在的联系,比如…

快速且靠谱的简单安装 PostgreSQL 15 yum 安装postgis3.3

快速且靠谱的简单安装 PostgreSQL 15 yum 安装postgis3.3 1、确保已经安装了PostgreSQL数据库。2、添加PostGIS的EPEL仓库3、使用YUM安装PostGIS4、以下为其他安装方式,一个个去找源码的编译安装,过程较为繁琐(不熟路的不推荐) 要…

工业大数据分析算法实战-day05

文章目录 day05分而治之中的MARS算法神经网络逼近能力解释 day05 今天是第5天,昨日从统计分析开始利用统计学的知识判断当前样本的分布以及估计总体的参数和假设检验的情况,以及介绍了线性回归算法的相关优化点,但是毕竟线性回归是线性划分的…

在Ubuntu服务器上备份文件到自己的百度网盘

文章目录 概述安装bypy同步文件定时任务脚本 概述 之前自购了一台阿里云服务器,系统镜像为Ubuntu 22.04, 并且搭建了LNMP开发环境(可以参考:《Ubuntu搭建PHP开发环境操作步骤(保姆级教程)》)。由于项目运行中会产生附…

safe area helper插件

概述 显示不同机型的必能显示的区域 实现步骤 引入safearea,引入其中的safearea的csharp 为cancas加入gameobject gameobject中加入safearea脚本 将UI作为这个gameobject的子物体,就可以完成显示

Unity 获取鼠标点击位置物体贴图颜色

实现 Ray ray Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out RaycastHit hit)) {textureCoord hit.textureCoord;textureCoord.x * textureMat.width;textureCoord.y * textureMat.height;textureColor textureMat.GetPixel(Mathf.Flo…

基于深度学习的猫狗识别系统【深度学习课设】

🏆 作者简介:席万里 ⚡ 个人网站:https://dahua.bloggo.chat/ ✍️ 一名后端开发小趴菜,同时略懂Vue与React前端技术,也了解一点微信小程序开发。 🍻 对计算机充满兴趣,愿意并且希望学习更多的技…

05、GC基础知识

JVM程序在跑起来之后,在数据的交互过程中,就会有一些数据是过期不用的,这些数据可以看做是垃圾,JVM中,这些垃圾是不用开发者管的,它自己会有一套垃圾回收系统自动回收这些内存垃圾,以备后面继续…

什么是战略思想?

古今中外,关于战略是什么?有非常多的理论,也有不同的视角。 中国最早的涉及战略的书籍据传是黄帝所著的《握奇文》,后有较为系统的兵法战略书籍为周朝姜太公(亦称姜尚、姜子牙等)所著的《六韬》&#xff0c…

2024.12.15 TCP/IP 网络模型有哪几层?(二)

2024.12.15 TCP/IP 网络模型有哪几层?(二) 上节课我们学习了网络模型有四部分构成,有应用层、传输层、网络层、网络接口层。 生成了 IP 头部之后,接下来要交给网络接口层(Link Layer)在 IP 头部的前面加上 MAC 头部&#xff0c…