如何解决python读取大数据量文件时造成的内存溢出?

Python内存溢出详解 Python内存溢出(Memory Overflow)是指程序申请的内存超过系统可用内存,导致Python解释器无法为对象分配足够的内存空间,通常会抛出异常。程序运行时抛出系统响应变慢,内存使用率接近100%程序崩溃或被系统强制终止。 阅读详情

由于以前遇到的数据文件体量都比较小,今天在使用python读取csv文件时直接内存溢出了。

这里特意记录一下解决问题的三种方式,遇到的场景就是使用pandas模块直接读取csv文件然后返回DataFrame对象结果内存溢出。

首先,来看一下解决这个问题的思路是什么,然后再来分析怎么解决这个问题?

最简单的方式就是直接使用软件工具将大文件进行拆分,拆分完成后再进行读取。第二种则是在读取大文件的过程中直接分段读取,比如按照每十行读取的方式直接进行读取操作。

再或者第三种就是使用底层处理比较优质的模块,比如polars,它的底层存储方式就不会发生内存溢出的问题。

# Importing the pandas module and giving it an alias of pd.
import pandas as pd

# Reading the csv file and returning a DataFrame object.
result_ = pd.read_csv('G:/test/data.csv')

#   File "pandas\_libs\parsers.pyx", line 808, in pandas._libs.parsers.TextReader.read_low_memory
#   File "pandas\_libs\parsers.pyx", line 866, in pandas._libs.parsers.TextReader._read_rows
#   File "pandas\_libs\parsers.pyx", line 852, in pandas._libs.parsers.TextReader._tokenize_rows
#   File "pandas\_libs\parsers.pyx", line 1973, in pandas._libs.parsers.raise_parser_error
# pandas.errors.ParserError: Error tokenizing data. C error: Expected 3 fields in line 14, saw 4542

上面就是直接读取大数据量的csv文件会发生python内存溢出的报错。

若是想继续使用pandas模块读取大数量的文件,可以加上分割读取数据的参数就不会发生内存溢出的现象了。

# Reading the csv file in chunks of 10 rows.
result_ = pd.read_csv('G:/test/data.csv', chunksize=10)

chunksize设置为10,就是可以按照每十行的读取方式来读取csv的数据,并且返回的也是DataFrame的数据对象。

然后就是采用polars模块读取的方式来处理大数据量csv文件,polars本身对于大数据的文件支持比较好,并且读取速度也有很大的提升。

可以使用polars模块一次性读取csv文件直接返回DataFrame的数据对象。

# Importing the polars module and giving it an alias of pol.
import polars as pol

# Reading the csv file and returning a DataFrame object.
data_ = pol.read_csv('G:/test/data.csv')

# Printing the dataframe.
print(data_)

图片

最后一种方式提前将大数据文件做完文件分割之后再进行读取,如果是做文件分割的话推荐一个比较好用的数据文件分割工具-EmEditor。

图片

关于Python学习指南

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

在这里插入图片描述

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方优快云官方认证二维码或者点击链接免费领取【保证100%免费】

Python | 使用Pandas DataFrame时的内存泄漏问题及示例 Pandas是一个功能强大且广泛使用的Python开源数据分析和操作库。它提供了一个DataFrame对象,允许您以非常直观的方式存储和操作行和列中的表格数据。Pandas DataFrames是处理数据的强大工具,但如果不小心使用,它们也可能成为内存泄漏的来源。当程序分配了要使用的内存,但在不再需要时未能正确释放该内存时,就会发生内存泄漏。这可能会导致程序随着时间的推移使用越来越多的内存,从而可能导致性能问题,甚至导致程序崩溃。 阅读详情

相关推荐

Python 内存优化:如何避免大规模数据处理时的内存溢出问题

本文介绍了Python处理大数据时的内存优化方法。通过使用生成器替代列表、迭代器逐行处理文件、优化数值类型为int32/float32等策略,可显著降低内存占用。关键技巧包括分块读取数据(如pandas的chunksize)、及时删除临时变量、使用内存映射技术(numpy.memmap)以及采用高效数据结构。对于超大规模数据,建议使用Dask等分布式框架。结合内存监控工具(memory_profiler)和合理的优化策略,可有效避免内存溢出问题,提升程序稳定性和执行效率。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 573

python 基本文件读写 及 读取大文件而内存不溢出4种方式

字节。

绀目澄清 2853

PostgreSQL游标:大数据量处理的数据库原生解决方案

在数据库编程中,处理海量数据时常常面临内存与性能的平衡难题。游标作为一种数据库查询结果的迭代器,其核心原理在于允许程序逐条或分批处理查询结果,而非一次性加载全部数据。这一机制在技术价值上实现了服务器端资源的高效管理,减少了网络传输压力,并维持了事务一致性。从应用场景来看,游标特别适用于数据导出、批量ETL、复杂报表生成等需要处理大结果集的场景。通过服务端游标,开发者可以在数据库层优雅地解决内存溢出问题,同时优化查询性能。本文聚焦于PostgreSQL游标的使用技巧与实战经验,帮助读者掌握这一高效的原生工具。

weixin_30443731的博客 743

已解决Python读取20GB超大文件内存溢出报错MemoryError

已解决Python读取20GB超大文件内存溢出报错MemoryError

努力让自己发光,对的人才能迎着光而来 2万+

避坑指南:处理CANoe采集的BLF文件时,Python脚本解析信号的那些常见错误

本文详细解析了使用Python脚本处理CANoe采集的BLF文件时常见的信号解析错误,包括DBC文件版本兼容性、标准帧与扩展帧ID处理、时间戳陷阱及信号验证等关键问题。通过实战案例和代码示例,帮助工程师避开这些陷阱,提升数据解析的准确性和效率。

weixin_42571738的博客 114

高效读取超大文件的Python实现方法

与上面的方法相比,它具有更好的性能,因为可以根据需要指定读取的字节数。总的来说,以上三种方法都可以高效读取超大文件,选择哪一种方法取决于具体的需求。在处理需要高效读取超大文件的情况下,可以尝试一下以上的方法,以提高程序的性能和效率。使用yield生成器可以有效地减小内存占用,并提高文件读取的效率。read_large_file()函数将文件划分为1MB的块,并使用yield返回每个块,然后使用for循环逐个处理这些块。逐行读取是一种最简单的读取超大文件的方法,可以通过Python自带的文件对象实现。

code_welike的博客 2131

python读取大文件内存不够_python 读取大文件,避免内存溢出

最近在学习python的过程中接触到了python对文件的读取。python读取文件一般情况是利用open()函数以及read()函数来完成:f = open(filename,'r')f.read()这种方法读取小文件,即读取远远大小小于内存的文件显然没有什么问题。但是如果是将一个10G大小的日志文件读取,即文件大于内存的大小,这么处理就有问题了,会造成MemoryError ... 也就是发生...

weixin_40006779的博客 1212

内存不足时,Python读取大文件(4g内存读写12g文件)

迭代器在运行过程中,仅仅存储当前迭代数据,不将全部数据都缓存在内存,访问大量数据时非常节约内存。所创建的fr对象是一个迭代器,使用fr.readlines()操作会将csv全部数据一次性读入(缓存)内存,而直接对fr执行for循环,每次仅仅读取csv文件的一条数据。使用Python将数据写入文件时,数据不会立即写入文件,通常会先存放在缓冲区(Python内部创建),减少访问磁盘的次数(磁盘访问比较慢,导致程序运行变慢)。2、匹配结果写入文件时:每隔固定时间将数据写入磁盘,防止大量数据缓存在内存。

qm5132的博客 1551

告别内存溢出:Python分批处理大数据量Excel的实战优化

在大数据处理场景中,内存溢出(OOM)是常见的工程难题,尤其是解析超大文件或执行批量导入时,一次将全量数据加载至内存往往导致进程崩溃。分批处理(Batch Processing)提供了一种通用解法:将大数据拆分为可控的批次,每批独立读取、计算与写入,使内存占用保持稳定,而非随数据总量增长。该方案显著提升资源可控性与失败恢复能力,适用于Excel解析、数据库批量读写、任务调度等场景。从一次真实的线上事故出发,介绍如何巧妙利用pandas的chunksize与openpyxl引擎实现分块读取,并配套批次状态管理

weixin_29035405的博客 287

基于 Python 的 LIF 模型:探索神经元同步与小世界网络

首先,我们定义了一个LIFNeuronself.soma.L = self.soma.diam = 12.6157 # 固定神经元形状self.cm = cm # 电容self.V_rest = V_rest # 静息电位self.V = V_rest # 初始化膜电位在初始化过程中,每个神经元被赋予初始的静息电位,并且其膜电位会在后续的模拟过程中动态变化。

qq_36224726的博客 1423

ESP32锂电池电量检测实战:从引脚选择到低功耗优化(附完整电路图)

本文详细介绍了ESP32锂电池电量检测的实战方案,从ADC引脚选择到低功耗优化,提供完整的电路图和代码实现。通过MOS管智能开关和深度睡眠技术,显著降低静态功耗至0.5μA,提升设备续航能力。适合物联网开发者解决电量检测中的常见问题。

weixin_28731223的博客 461

Python读大数据量txt文本

在用Python读一个两个多G的txt文本时,天真的直接用readlines方法,结果一运行内存就崩了。 还好同事点拨了下,用yield方法,测试了下果然毫无压力。咎其原因,原来是readlines是把文本内容全部放于内存中,而yield则是类似于生成器。 代码如下:...

chenxuan5849的博客 1355

告别环境依赖!用PyInstaller把PaddleOCR项目打包成独立EXE(附完整spec文件配置)

本文详细介绍了如何使用PyInstaller将PaddleOCR项目打包成独立EXE文件,彻底解决Python环境依赖问题。通过完整的spec文件配置和实战技巧,开发者可以轻松创建开箱即用的OCR工具,特别适合需要交付给非技术用户的场景。文章涵盖环境配置、模型打包、性能优化等关键环节,并提供了解决常见问题的方案。

weixin_33712987的博客 573

python pandas读取csv文件报错:MemoryError

原因 一般出现这样的情况,是由于读取的数据量过大,内存使用到一定时会终止内存 如果你的Python是32位的,那么你的pandas和Numpy也只能是32位的,当你的内存使用超过2G时,就会自动终止内存。 解决办法 终极解决方法:再安装一个64位的python,并且重写安装64位的所需的API,可以当副本使用,再你需要读取大文件时切换这个副本使用就基本没问题了 ...

ling_lang的博客 1668

Vivado 2021.1 实战:手把手教你用IEEE1735 V2加密你的Verilog源码(附完整TCL命令)

本文详细介绍了在Vivado 2021.1中使用IEEE1735 V2标准加密Verilog源码的全流程,包括许可证申请、密钥文件配置、TCL命令执行及加密后验证。通过实战步骤和完整TCL命令,帮助开发者有效保护FPGA设计知识产权,确保核心算法安全。

weixin_42706667的博客 189

分享一下如何使用labelimg制作自己的YOLO数据集

首先准备一下自己的下准备一个空文件夹用于保存标签文件,如下图所示。

skywalkerxhx的博客 831

Python Generator 工作机制及应用解析

一、Python generator概述及大数据文件读取内存溢出分析 Generators是一类特殊的方法,这类方法返回一个lazy iterator而无需在内存中存储所有的数据内容。Generators是Python的核心内容,对于处理大数据量文件或者数据流(对于流式架构来说,通常有生产者和消费者,数据是一批一批或者一条一条进行处理的,在这种情况下,数据量可以是无限的,你无法预测会有多少数据)并同时需要进行更加精细的控制时是很有用的,在Rasa框架中可以看到基于generators架构的很多应用。 首

m0_49380401的博客 2711

SpringBoot+Maven打包实战:把项目变成SDK供其他团队调用

本文详细介绍了如何将SpringBoot项目改造并打包成可被其他项目依赖的SDK。通过调整Maven配置,剥离SpringBoot父依赖与启动类,并定制打包插件,最终生成标准的JAR依赖库,实现从“可执行应用”到“组件化SDK”的优雅转变,便于团队间功能复用。

assembly8low的博客 825

python如何完成对 Excel文件的解密后读取?

通常为了防止重要的Excel文件数据内容的泄露,需要对文件整体进行加密与解密的操作。对于文件的加解密过程,python也有很多非标准库来帮助我们完成操作,这里主要说明如何完成对Excel文件的解密与读取操作。这里我们使用到的是msoffcrypto-tool非标准库,可以选择使用pip的方式安装一下即可。该msoffcrypto-tool模块提供了代码层面的解密操作,也提供了CLI终端命令直接解密的操作。1.使用终端命令通过在终端命令行输入下面的命令即可完成对Office文件解密操作。

梦在硅谷的博客 3128

静态代码审计插件 snyk 使用教程

静态代码审计插件 snyk 使用教程

SHELLCODE_8BIT的博客 2002

uniapp [全端兼容] - 详细实现引入使用 Google 谷歌地图显示及搜索城市地点,提供地图标点、地址搜索、定位导航、中文显示及汉化、地图打位置标点显示、搜索框搜索功能、省市区详细经纬度数据等

uniapp,h5移动端网页,微信小程序,Android,苹果ios,app,nvue,谷歌地图,官方,谷歌官方文档,googlemap,申请key,uniApp谷歌地图,详细使用教程,无法访问,集成谷歌地图,app引入谷歌地图,选点定位,地图导航,位置搜索,城市搜索,文字地点模糊查询,地点省市区详细数据,经纬度信息,markers地图标记点,一直报错怎么办,接入google地图不显示报错,谷歌地图插件,vue3,vue2,组件,Key申请流程,谷歌key怎么申请,api文档,网站打不开,用什么插件,在u

🏆 前端领域优质创作者 1万+

大数据量处理实战:Java/Python分批处理与内存优化指南

大数据量处理是软件工程中的核心挑战,其核心原理在于通过合理的内存管理和数据处理策略避免系统资源耗尽。从技术价值角度看,高效的数据处理能力直接关系到系统的稳定性和性能表现,特别是在数据迁移、日志分析、批量导入导出等应用场景中尤为关键。分批处理技术通过将大数据集分解为小批次逐一处理,结合流式读取和异步并行机制,能够有效解决内存溢出和性能瓶颈问题。Java的Stream API和Python的生成器为流式处理提供了强大支持,而内存优化策略如及时清理缓存、使用对象池等技术进一步提升了处理效率。本文基于大数据处理和性

weixin_34088583的博客 384

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

python解析excel内存溢出_phpExcel大数据量情况下导出内存溢出解决

1、将单元格数据序列化后保存在内存中PHPExcel_CachedObjectStorageFactory::cache_in_memory_serialized;2、将单元格序列化后再进行Gzip压缩,然后保存在内存中PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip;3、缓存在临时的磁盘文件中,速度可能会慢一些PHPExcel_C...

weixin_39943202的博客 558

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

python 处理文件的时候 程序运行过程中被 killed

小量数据测试时没问题,数据量到几百万时killed 怀疑内存使用问题: 代码 for line in file.readlines(): 改成: for line in open("file","r") 下面这种不用一次性把数据读到内存。 ...

legalhighhigh的博客 7358

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Python通达信数据读取终极指南:mootdx完整使用教程

在金融数据分析和量化交易的世界里,通达信作为国内主流的证券分析软件,积累了海量的历史行情和财务数据。但对于Python开发者来说,如何高效、稳定地读取这些数据一直是个技术难题。今天,我要为你介绍的 **mootdx** 项目,正是解决这个痛点的终极方案! ## 🎯 项目亮点与特色:为什么选择mootdx? 想象一下,你正在开发一个量化交易策略,需要获取A股市场的历史数据进行分析。传统的方式要

gitblog_00844的博客 939

Python实现MySQL数据导出CSV的方法与实战经验

我实际测试发现,平台的一键部署功能特别适合这种数据库工具类项目,生成的CSV文件可以直接下载到本地使用,整个过程流畅无卡顿。通过这个项目,我们可以学习到如何编写健壮的生产环境脚本,处理实际业务中的各种边界情况。在实际数据仓库项目中,我们经常需要将数据库中的表或视图数据导出为CSV格式,供数据分析师或业务部门进行数据质量评审。:在遍历表/视图列表导出数据时,应该为每个表的导出操作单独添加try-except块,这样即使某个表导出失败也不会影响其他表的处理。同时记录详细的错误日志,便于后续排查问题。

SilvermistFalcon67的博客 716
上一篇: 你知道 Python 其实自带了小型数据库吗
下一篇: 用Python出了3000道数学题,外甥表示要正月剪头!
我爱学大模型
博客等级 码龄3年 7883粉丝 687原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值