http://www.cnblogs.com/aicro/p/3371986.html

先前需要做一个使用python读取大文件(大于1G),并逐条存入内存进行处理的工作。做了很多的尝试,最终看到了如下的文章。

http://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

------------------------------------------------------------------------

python 大文件以行为单位读取方式比对的更多相关文章

  1. python大文件读取

    python大文件读取 https://stackoverflow.com/questions/8009882/how-to-read-a-large-file-line-by-line-in-pyt ...

  2. python 读取大文件,按照字节读取

    def read_bigFile(): f = open("123.dat",'r') cont = f.read() : print(cont) cont = f.read() ...

  3. Python 大文件处理

    非内存资源可以使用with 在python中逐行读取大文件 在我们日常工作中,难免会有处理日志文件的时候,当文件小的时候,基本不用当心什么,直接用file.read()或readlines()就可以了 ...

  4. iOS将大文件映射到内存(读取大文件)

    http://blog.csdn.net/xyt243135803/article/details/40995759 在<中国区GPS偏移纠正(适用于Google地图)>一文中曾读取一个7 ...

  5. python大文件迭代器的流式读取,之前一直使用readlines()对于大文件可以迅速充满内存,之前用法太野蛮暴力,要使用xreadlines或是直接是f,

    #!/usr/bin/env python #encoding=utf-8 import codecs count =0L #for line in file("./search_click ...

  6. python读取大文件【一行一行读取】

    with open('e:/content.txt') as f: for line in f: if '==3346628==' in line: …………

  7. python txt文件的写入和读取

    1.文件的打开 使用open () 函数 打开文件.他有两个参数,文件路径或文件名和文件的打开方式. "r" 只读模式,不能编辑和删除文件内容. "w" 写入模 ...

  8. 用python打开文件夹的三种方式

    一.利用explorer.exe import os # 利用explorer.exe执行 start_directory = r'C:\代码\软件包' os.system("explore ...

  9. java 分次读取大文件的三种方法

    1. java 读取大文件的困难 java 读取文件的一般操作是将文件数据全部读取到内存中,然后再对数据进行操作.例如 Path path = Paths.get("file path&qu ...

随机推荐

  1. Java基础知识强化之网络编程笔记05:UDP之多线程实现聊天室案例

    1. 通过多线程改进刚才的聊天程序,这样我就可以实现在一个窗口发送和接收数据了 2.  代码示例: (1)SendThread.java,如下: package com.himi.udpDemo2; ...

  2. Java基础知识强化之网络编程笔记02:Socket通信原理图解

    1. Socket (1)Socket套接字  网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字 (2)Socket原理机制:  • 通信两端都有Socket.  • 网 ...

  3. Eclipse优化集合,Eclipse优化速度,解决Ctrl+C、Ctrl+V卡

    Eclipse优化集合,Eclipse优化速度,解决Ctrl+C.Ctrl+V卡 >>>>>>>>>>>>>>> ...

  4. Android 5.0 新特性

    Material Design Material Design简介 Material Design是谷歌新的设计语言,谷歌希望寄由此来统一各种平台上的用户体验,Material Design的特点是干 ...

  5. HDU-1009(简单贪心)

    FatMouse' Trade Problem Description FatMouse prepared M pounds of cat food, ready to trade with the ...

  6. 【原创教程】JavaScript详解之语法和对象

    JavaScript的好的想法:函数.弱类型.动态对象和一个富有表现力的对象字面量表示法. JavaScript的坏的想法:基于全局变量的编程模型.   好了,不管他是好的还是坏的,都是我的最爱,下面 ...

  7. MyEclipse激活失败,解决办法

    文章参考:http://www.cnblogs.com/dingyuanxin/p/4046356.html 失败可能是:systemid和exe破解出来的那个对应不上: 1.启动MyEclipse, ...

  8. vsftpd安装指南

    如果您用的是Fedora 或Redhat 系统,可以用下面的命令在线安装: [root@localhost ~]# yum install vsftpd 如果是debian 类系统,可以用apt 来在 ...

  9. PHP Ajax简单实例

    最近学习Jquery Ajax部分,通过简单例子,比较了下post,get方法的不同 HTML部分 <html> <head> <title>jQuery Ajax ...

  10. Data Abstraction

    What is an object? (Page 238) In C++, an object is just a variable, and the purest definition is &qu ...