Python读大数据txt


Posted in Python onMarch 28, 2016

如果直接对大文件对象调用 read() 方法,会导致不可预测的内存占用。好的方法是利用固定长度的缓冲区来不断读取文件内容。即通过yield。

    在用Python读一个两个多G的txt文本时,天真的直接用readlines方法,结果一运行内存就崩了。

    还好同事点拨了下,用yield方法,测试了下果然毫无压力。咎其原因,原来是readlines是把文本内容全部放于内存中,而yield则是类似于生成器。

代码如下:

def open_txt(file_name):
  with open(file_name,'r+') as f:
    while True:
      line = f.readline()
      if not line:
        return
      yield line.strip()

调用实例:

for text in open_txt('aa.txt'):
  print text

例二:

目标 txt 文件大概有6G,想取出前面1000条数据保存于一个新的 txt 文件中做余下的操作,虽然不知道这样做有没有必要但还是先小数据量测试一下吧。参考这个帖子:我想把一个list列表保存到一个Txt文档,该怎么保存 ,自己写了一个简单的小程序。
====================================================

import datetime
import pickle

start = datetime.datetime.now()
print "start--%s" % (start)

fileHandle = open ( 'train.txt' )
file2 = open('s_train.txt','w') 

i = 1
while ( i < 10000 ):
  a = fileHandle.readline()
  file2.write(''.join(a)) 
  i = i + 1

fileHandle.close() 
file2.close()

print "done--%s" % ( datetime.datetime.now() - start)

if __name__ == '__main__':
  pass

====================================================
pickle 这个库大家说的很多,官网看看,后面可以好好学习一下。

Python 相关文章推荐
python正则表达式抓取成语网站
Nov 20 Python
使用Python构建Hopfield网络的教程
Apr 14 Python
Python将阿拉伯数字转换为罗马数字的方法
Jul 10 Python
全面解析Python的While循环语句的使用方法
Oct 13 Python
Python连接DB2数据库
Aug 27 Python
pandas中apply和transform方法的性能比较及区别介绍
Oct 30 Python
python字符串中匹配数字的正则表达式
Jul 03 Python
基于numpy中的expand_dims函数用法
Dec 18 Python
使用wxpy实现自动发送微信消息功能
Feb 28 Python
Python 获取异常(Exception)信息的几种方法
Dec 29 Python
利用Matlab绘制各类特殊图形的实例代码
Jul 16 Python
python内置模块之上下文管理contextlib
Jun 14 Python
Python常用的爬虫技巧总结
Mar 28 #Python
Python对数据库操作
Mar 28 #Python
Python字符串切片操作知识详解
Mar 28 #Python
python Django框架实现自定义表单提交
Mar 25 #Python
python Django批量导入数据
Mar 25 #Python
python Django批量导入不重复数据
Mar 25 #Python
用Python实现斐波那契(Fibonacci)函数
Mar 25 #Python
You might like
DC动漫人物排行
2020/03/03 欧美动漫
ThinkPHP基本的增删查改操作实例教程
2014/08/22 PHP
php中关于长度计算容易混淆的问题分析
2016/05/27 PHP
PHP搭建大文件切割分块上传功能示例
2017/01/04 PHP
laravel5使用freetds连接sql server的方法
2018/12/07 PHP
详解Laravel服务容器的绑定与解析
2019/11/05 PHP
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
2020/08/26 PHP
window.showModalDialog使用手册
2007/01/11 Javascript
网站页面自动跳转实现方法PHP、JSP(上)
2010/08/01 Javascript
jQuery学习笔记之jQuery.fn.init()的参数分析
2014/06/09 Javascript
JS倒计时代码汇总
2014/11/25 Javascript
node.js中使用socket.io制作命名空间
2014/12/15 Javascript
浅析nodejs实现Websocket的数据接收与发送
2015/11/19 NodeJs
JavaScript代码实现左右上下自动晃动自动移动
2016/04/08 Javascript
jquery 实现拖动文件上传加载进度条功能
2018/03/18 jQuery
vue动态路由配置及路由传参的方式
2018/05/23 Javascript
微信小程序中使用wxss加载图片并实现动画效果
2018/08/13 Javascript
JQuery实现ajax请求的示例和注意事项
2018/12/10 jQuery
[46:09]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS VG第三场
2014/05/26 DOTA
[01:12](回顾)DOTA2国际邀请赛,全世界DOTAer的盛宴
2014/07/01 DOTA
Python isinstance判断对象类型
2008/09/06 Python
Python使用剪切板的方法
2017/06/06 Python
Python编程实现控制cmd命令行显示颜色的方法示例
2017/08/14 Python
R语言 vs Python对比:数据分析哪家强?
2017/11/17 Python
Linux下python制作名片示例
2018/07/20 Python
python画一个玫瑰和一个爱心
2020/08/18 Python
python 判断linux进程,并杀死进程的实现方法
2019/07/01 Python
Python基本语法之运算符功能与用法详解
2019/10/22 Python
2014全国两会大学生学习心得体会
2014/03/10 职场文书
爱耳日宣传活动总结
2014/07/05 职场文书
建党伟业观后感
2015/06/01 职场文书
关于车尾的标语大全
2015/08/11 职场文书
2019年销售部季度工作计划3篇
2019/10/09 职场文书
开发一个封装iframe的vue组件
2021/03/29 Vue.js
修改MySQL的数据库引擎为INNODB的方法
2021/05/26 MySQL
MYSQL 无法识别中文的永久解决方法
2021/06/03 MySQL