python大文件获取_Python3 _ 读取大文件

===================== 1============================================

帖子链接:http://blog.csdn.net/hackstoic/article/details/49804655

方法一:

将文件切分成小段,每次处理完小段内容后,释放内存

这里会使用yield生成自定义可迭代对象, 即generator, 每一个带有yield的函数就是一个generator。

def read_in_block(file_path):

BLOCK_SIZE = 1024

with open(file_path, "r") as f:

while True:

block = f.read(BLOCK_SIZE)  # 每次读取固定长度到内存缓冲区

if block:

yield block

else:

return  # 如果读取到文件末尾,则退出

def test3():

file_path = "/tmp/test.log"

for block in read_in_block(file_path):

print block

方法二:

利用open(“”, “”)系统自带方法生成的迭代对象

def test4():

with open("/tmp/test.log") as f:

for line in f:

print line

======================2=============================================

原帖子: https://www.cnblogs.com/aicro/p/3371986.html

其链接:https://stackoverflow.com/questions/8009882/how-to-read-large-file-line-by-line-in-python

该文章实际上提供了集中读取大文件的方式,先经过测试总结如下

1. for line in fileHandle:

该方式是最快速的。而且python虚拟机在内部帮助我们对buffer进行管理,内存占用量小,且不差错。

2. fileinput方式

该方式实际效果较慢,但是也有buffer管理功能

3. 使用file.read(sizeHint)的方式进行区块读取

该方法是三者中最慢的,而且需要自己去控制内存和选择需要的区域,所以在读到的buffer之后,还需要进行拆分工作,比较麻烦,而且容易出错。最无奈的是,使用下来(我的环境是2.6和2.7),sizeHint作用较小,原来觉得如果sizeHint是1024,则每次在内存中只会驻留1024B的内容,但是实际上不是这样的,在度过一次1024B之后,再次读取1024B的时候,尽管已经对之前的buf进行了del操作,但是该1024B仍然存留于内存中,所以内存越吃越大,最终MemoryError。

4. file.readline和file.readlines

和read类似,只适用于小文件。

结论:

在使用python进行大文件读取时,应该返璞归真,使用最简单的方式,交给解释器,就管好自己的工作就行了

1. 大文件(>1.4G)

所使用的方式

size_hint

所使用时间

for i in open(...)

/

103.382492s

fileinput

/

131.525755s

file.read和buffer控制

2亿B

报错:memoryError

2. 小文件(西游记的txt,大约1.4M)

所使用的方式

size_hint

所使用时间

for i in open(...)

/

2.11s

fileinput

/

4.22s

file.read和buffer控制

2亿B

4.07s

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值