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

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

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读取大文件的某行_python 大文件以行为单位读取方式比对相关推荐

  1. linux中sed -i命令修改文件内容、在文件中插入行、删除文件中删除行

    文章目录 0.sed -i与sed 1.修改文件内容 2.在文件中插入行 3.在文件中删除行 4.使用find查找文件,并用 | xargs传输文件名给sed命令 0.sed -i与sed sed - ...

  2. python查找关键字所属行_Python查找文件有多牛?男默女泪!!!

    某天,隔壁大神正在看一份内核技术文档,我想研读下文档向大神"偷师",恰好我的虚拟XP桌面无法使用搜索功能,而且项目组一般是一起使用共享目录的,这就导致大量资料杂糅在一起,我要找到大 ...

  3. python向文档中输入内容_Python修改文件往指定行插入内容的实例

    需求:批量修改py文件中的类属性,为类增加一个core = True新的属性 原py文件如下 a.py class A(): description = "abc" 现在有一个1. ...

  4. python读取数据的函数详解_python之文件读写详解

    打开文件 函数open() 参数说明: file:文件路径 mode: 文件的读写方式,默认'r',只读方式: buffering:设置缓冲策略,0用于二进制文件,1为行缓冲,用于文本模式:默认二进制 ...

  5. 为什么python不报错不出结果_python的坑货ConfigParser类读取文件失败不报错

    python中configparser模块(这个模块有个大坑)可以读取配置文件,当然这个配置文件的格式得按照这个模块指定的.格式如下 [CLICKHOUSE] ip = 172.20.96.78 us ...

  6. java nio 按行读取_JAVA之NIO按行读写大文件,完美解决中文乱码问题

    packagecom.chillax.imp; importjava.io.File; importjava.io.IOException; importjava.io.RandomAccessFil ...

  7. python读取文件需要的异常处理_Python基础:文件的简单读取和操作以及异常处理...

    Python提供了直接获取文件对象的方法,方便我们直接操作文件. 下面我们就使用Python对文件的读取.写入以及数据存储进行整理说明,以及Python对异常的处理. 获取文件对象 打开一个txt文件 ...

  8. python如何读取数据保存为新格式_python,初学者应用实例:读取文件中的数据,将将北京时间转换成世界时间,再保存成新的CSV格式文件...

    数据格式转换是科研工作中经常需要完成的任务.本程序实现了这个功能.将文本文件"TableS1.dat"中的数据读取,原文件格式为: No Date Time Mag Dis 119 ...

  9. python对文件的操作模式_python对文件的操作

    一.python中对文件.文件夹操作时经常用到的os模块和shutil模块常用方法. 1.得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 2.返回指定目录下的所有文件 ...

最新文章

  1. SYSENTER——快速系统调用
  2. [題解](最小生成樹)luogu_P2916安慰奶牛
  3. mysql系统变量_MySQL 系统变量(system variables)
  4. matlab保存变量的值,怎么不能保存之前的变量值?求解
  5. php中empty(), is_null(), isset()函数区别
  6. 仍不切换到Java 8的6个理由
  7. python 课堂笔记 420_一位初学Python同学的课堂笔记,仿佛看到当年的自己
  8. .Net IOC框架入门之一 Unity
  9. CRC源码生成工具,可生成Verilog和VHDL
  10. netcat,nmap常用例子
  11. 随手记_C++语法中的一些注意事项
  12. 算法:258. Add Digits 各位相加
  13. 数学建模国赛-2015A太阳影子定位再研究(未完)
  14. RAR解压、压缩命令
  15. 第一章: 利用神经网络识别手写数字
  16. 系统平台补流量会影响店铺吗?
  17. 如何调用外部webservice 接口来发送短信
  18. 003. EsayUI系列之easyui-linkbutton
  19. pyltp安装的一系列过程
  20. 快递公司泄露买家信息最高罚3万 快递员双挨罚

热门文章

  1. 信息服务器恢复需要多少时间,云服务器灾难恢复的4个计划
  2. ICP算法与Kdtree
  3. Javaspring 1-6课 基本概念及第一个Javaspring程序
  4. 数据结构实验 3.抓住那头牛
  5. Linux下压缩、解压缩、效率,linux tar bz、bz2、gz、zip
  6. CleanCodeHandbook Chapter 5: Bit Manipulation(33-34)
  7. 算法应用-百钱买百鸡
  8. Struts2一个诡异问题的解决
  9. 深度剖析Java数据结构之表(三)——ArrayList泛型类的实现
  10. 培养创造性思维20个技巧