最近在学习python的过程中接触到了python对文件的读取。python读取文件一般情况是利用open()函数以及read()函数来完成:

f = open(filename,'r')

f.read()

这种方法读取小文件,即读取远远大小小于内存的文件显然没有什么问题。但是如果是将一个10G大小的日志文件读取,即文件大于内存的大小,这么处理就有问题了,会造成MemoryError ... 也就是发生内存溢出。

发生这种错误的原因在于,read()方法执行操作是一次性的都读入内存中,显然文件大于内存就会报错。

解决方法:

这里发现跟read()类似的还有其他的方法:read(参数)、readline()、readlines()

(1)read(参数):通过参数指定每次读取的大小长度,这样就避免了因为文件太大读取出问题。

whileTrue:

block= f.read(1024)if notblock:break

(2)readline():每次读取一行

whileTrue:

line=f.readline()if notline:break

(3)readlines():读取全部的行,构成一个list,通过list来对文件进行处理,但是这种方式依然会造成MemoyError

for line inf.readlines():

....

以上基本分析了python中读取文件的方法,但是总感觉不能达到python中所强调的优雅,后来发现了还有下面的解决方法:

pythonic(我理解的是很python的python代码)的解决办法:

with open(filename, 'r') as flie:for line infile:

....

对可迭代对象file进行迭代,这样会自动的使用buffered IO以及内存管理,这样就不必担心大文件问题了。

后来,又发现了一个模块:linecache,这个模块也可以解决大文件读取的问题,并且可以指定读取哪一行,

#输出第2行

text = linecache.getline(filename, 2)

python读取文件-python读取大文件相关推荐

  1. html大文件传输,socket大文件传输

    遇到了在c#中socket如何实现大文件传输 接收端 private void Receive(Socket socket) { NetworkStream ns = new NetworkStrea ...

  2. 如何快速传输大文件,介绍大文件快速方法

    现在,企业比以往任何时候都面临着一个重大挑战:需要一个快速共享文件的解决方案.但是,并非所有快速文件传输解决方案都以相同的速度传输文件.文件大小.端点位置.路径.设备.防火墙.网络系统和加密需求都会限 ...

  3. Linux_Shell脚本 + 配置文件:按照不同文件类型合并文件,小文件合并成大文件

    需求概述 某项业务中,我方通过文件接口与上游系统进行数据交互,上游系统通过ftp的方式推送接口数据文件到指定目录,我方通过sqlldr的方式入库并处理接口数据. 为保证接口数据的一致性,我方每天会将前 ...

  4. Git objects文件夹下大文件清理

    Git objects文件夹下大文件清理 最近遇到git上工程突然变得很大,原因是.git/objects/pack 文件过大,之前上传过大文件,文件虽然删除,但是记录还在,在此先记录一下. # 例如 ...

  5. Python read,readline,readlines和大文件读取

    原本,我觉得read,readline,readlines比较简单,没什么好说的,本没打算要单独说一说的,但是在一次面试的时候,面试官问到了这个问题,但我并没有回答的很好,在面对大文件时的处理,没有给 ...

  6. hive与spark合并小文件,将大文件打碎成小文件

    场景一:将小文件合并成大文件. mro_hour_test表每个分区有几千个1m未压缩小文件, 以下语句是将几千个文件在输入时(map阶段)合并成150M一个的文件,插入到mro_hour_test_ ...

  7. python读取.tsv文件例子(大文件处理)

    本文介绍如何用python读取.tsv文件. 目录 1..tsv 文件介绍 2..tsv 文件读取 1..tsv 文件介绍 TSV(Tab-separated values)文件是一种文本文件格式,它 ...

  8. 如何在Python中便宜地获取大文件的行数?

    我需要在python中获取一个大文件(数十万行)的行数. 内存和时间最有效的方法是什么? 目前,我这样做: def file_len(fname):with open(fname) as f:for ...

  9. 如何用python最快的获取大文件的最后几行

    工作中经常会遇到处理日志文件的问题:为了得到日志的最新状态,我们需要获取日志文件的最后部分行来做判断.那么,这种情况下我们应该怎么做呢? 1)常规方法:从前往后依次读取 步骤:open打开日志文件. ...

  10. python移除系统多余大文件

    文件多了乱放, 突然有一天发现硬盘空间不够了, 于是写了个python脚本搜索所有大于10MB的文件,看看这些大文件有没有重复的副本,如果有,全部列出,以便手工删除 使用方式 加一个指定目录的参数 比 ...

最新文章

  1. 【系统平台】模拟器-通道-模型-图形配置
  2. 【Python学习系列二十五】数据结构-有向图绘制
  3. 2012年7月份第4周51Aspx源码发布详情
  4. pycharm 运行odoo10出现ImportError: No module named win32service错误
  5. SAP License:把握好集成测试大关,ERP就成功了一大半
  6. java给list排序_java 怎么将List里面数据排序
  7. 蚂蚁支付宝小程序开发从零开始[含demo]
  8. 现场总线与计算机网络的最大区别,现场总线与局域网的区别是什么
  9. [游戏技术] Hunter Mode 猎人模式v1.8(重制版)
  10. 郑捷《机器学习算法原理与编程实践》学习笔记(第六章 神经网络初步)6.2 BP神经网络...
  11. angular 易犯错误
  12. 华为、OPPO、vivo、小米牵头制定快充协议统一技术
  13. 图片转字符画(python)
  14. 在Word中设置页面B5的问题
  15. 1032 挖掘机技术哪家强 Python实现
  16. 基于51单片机将红外避障模块(E18-D80NK)与led联动
  17. 中英互译软件工程初步设计
  18. 【CSS随笔】弹性盒子的flex属性
  19. Educational Codeforces Round 96 (Rated for Div. 2) ABCD
  20. 使用隐含Trace参数诊断Oracle Data Pump(expdp)故障

热门文章

  1. JQuery------获取input type=file中的文件内容
  2. Ubuntu下配置和编译cpp-ethereum客户端
  3. 来自codeblock 贴吧
  4. Object-c学习之路二(oc内存管理黄金法则1)
  5. 为 UITextField 增加键盘偏移的模板化写法
  6. python 默认字典
  7. 微信小程序把玩(二十七)audio组件
  8. modelsim do文件仿真
  9. ASP.NET - 截取固定长度字符串显示在页面,多余部分显示为省略号
  10. 提高vb -》excel数据的导入速度