由于python水平不够,很多高效的方法不太了解,最近在处理大文本数据时,用老方法读取文件内容,容易内存溢出,所以找到这个教程,目前正在读取1.5G的文本文件。
转载地址来源:http://chenqx.github.io/2014/10/29/Python-fastest-way-to-read-a-large-file/
感谢!!!!
另外自己看到一个方法是,每次读取一部分,然后释放变量,用的是python的gc模块。
import gc
del a(a是一个变量)
gc.collect()
最近处理文本文档时(文件约2GB大小),出现
memoryError
错误和文件读取太慢的问题,后来找到了两种比较快
Large File Reading
的方法,本文将介绍这两种读取方法。
Preliminary
我们谈到“文本处理”时,我们通常是指处理的内容。Python 将文本文件的内容读入可以操作的字符串变量非常容易。文件对象提供了三个“读”方法:
.read()
、
.readline()
和
.readlines()
。每种方法可以接受一个变量以限制每次读取的数据量,但它们通常不使用变量。
.read()
每次读取整个文件,它通常用于将文件内容放到一个字符串变量中。然而
.read()
生成文件内容最直接的字符串表示,但对于连续的面向行的处理,它却是不必要的,并且如果文件大于可用内存,则不可能实现这种处理。下面是
read()
方法示例:
由于python水平不够,很多高效的方法不太了解,最近在处理大文本数据时,用老方法读取文件内容,容易内存溢出,所以找到这个教程,目前正在读取1.5G的文本文件。转载地址来源:http://chenqx.github.io/2014/10/29/Python-fastest-way-to-read-a-large-file/感谢!!!! 最近处理文本文档时(文件约2GB大小),出现
http://chenqx.github.io/2014/10/29/
Python
-fastest-way-to-read-a-large-file/
最近处理
文本
文档时(文件约2
GB
大小),出现
memory
Error
错误和文件
读取
太慢的问题,后来找到了两种比较快Large
File Reading 的方法,本文将介绍这两种
读取
方法。
Preliminary
#do something with data
这种做法非常的简单。这个代码在打开文件的过程中,不会一次性
读取
全部文件,而是采用每次
读取
一行的方式,类似于buffer机制。
当然我们也可以自己去实现一个buff...
查了下,应该是
python
位数的问题,一开始我本地是32位的。
如果你的
Python
用的是32位的,那么你的pandas和Numpy也只能是32位的,那么当你的内存使用超过2G时,就会自动终止内存。、
后来换成64位的就没有报错了
日志记录了信息帧的收发,我需要检查某一个寄存器的收发值,不过这一个个的查下来,恐怕我是要累吐血了,于是我就用上了
python
,让电脑替我干活……
with open 和readline
首先要
读取
文件,以with open的方式,这样可以在读完文件后关掉该文件,然后是readline,可以一行一行的
读取
,最后就是判断日志的内容了,日志内容非常规范,所以处理起来相对简单
一直以来我都是用readlines的方法,把文件都读进来处理,其实这个方法不大的文件,因为都都进来,这样就比较吃内存。我这边动辄搞1,200百万行的
数据
文件,这样搞不太好,也是经过一段时间学习,理解 总结如下
大家一起讨论、分享
如果
文本
文件不是那么大,您可以一次将
文本
文件的全部内容读入内存。
with open('input.txt', encoding='utf-8') as f:
lines = f.readlines()
readline() 以字符串形式返回一行,用while循环,读文件
Python
可以使用open()函数打开大
文本
文件,然后使用read()或readlines()方法
读取
文件内容。为了避免内存溢出,可以使用迭代器来逐行
读取
文件内容,例如:
with open('large_file.txt', 'r') as f:
for line in f:
# 处理每一行
数据
另外,也可以使用pandas库中的read_csv()方法来
读取
大型CSV文件。该方法支持分块
读取
,可以避免内存溢出问题。例如:
import pandas as pd
chunk_size = 100000 # 每次
读取
100万行
数据
for chunk in pd.read_csv('large_file.csv', chunksize=chunk_size):
# 处理每一块
数据