python-problem-大文件的读取

python读取大文件


一.问题

博主在使用glove840b词向量的时候,遇到的一些坑。这个词向量大概有5.25个G容量,并且我需要按照行来进行处理。然后我直接用了

f = open(path,encoding="utf-8").readlines()

然后内存就炸了。我可是16G的内存呢。

二.对比几种读文件的方法

1.with
with open(path, encoding="utf-8") as f:
    for line in f:
        dosomething()

只占用4.6M内存
注意这种方法每一行最后会有一个’\n’

There should be one – and preferably only one – obvious way to do it.

2.直接遍历
f = open(path, encoding="utf-8")
for line in f:
    dosomething()

只占用4.6M内存
注意这种方法每一行最后会有一个’\n’
这里我想说用with和直接每次读一行进行遍历,实际上是一样的效果的。只是with有一些好处,我打算下一章专门写一下with。先举个列子,用with,就不用在读文件结束的时候写f.close()了。

3.使用readlines()
f = open(path, encoding="utf-8").readlines()
for line in f:
    dosomething()

这种方法会把整个文件一次性加载在内存中,对于小文件来说,处理起来,速度会更快。
但是加载5.25的G的文本的时候,内存直接就爆满了。

4.使用yield配合readline

三.总结

尽量使用with的方法吧。
但是如果文章真的不是很大的话,或者内存足够大的话,还是用readlines比较好,速度能够提升好多。可以具体比较一下。





参考
https://stackoverflow.com/questions/8009882/how-to-read-large-file-line-by-line-in-python

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值