专栏首页python3python对大文件的增量读取

python对大文件的增量读取

对于很多大文件的增量读取,如果遍历每一行比对历史记录的输钱或者全都加载到内存通过历史记录的索引查找,是非常浪费资源的,网上有很多人的技术博客都是写的用for循环readline以及一个计数器去增量读取,这样是十分脑残的,假如文件很大,遍历一次太久。  我们需要了解获取文件句柄的基本理论,其中包含的指针操作等。  原理是这样子,linux的文件描述符的struct里有一个f_pos的这么个属性,里面存着文件当前读取位置,通过这个东东经过vfs的一系列映射就会得到硬盘存储的位置了,所以很直接,很快。  以下是利用python实战代码,核心函数tell(),seek(). 也是调用的系统调用seek tell seek()的三种模式:    (1)f.seek(p,0)  移动当文件第p个字节处,绝对位置    (2)f.seek(p,1)  移动到相对于当前位置之后的p个字节    (3)f.seek(p,2)  移动到相对文章尾之后的p个字节 tell():    返回当前文件的读取位置。 代码: #!/usr/bin/python fd=open("test.txt",'r') #获得一个句柄 for i in xrange(1,3): #读取三行数据    fd.readline() label=fd.tell() #记录读取到的位置 fd.close() #关闭文件 #再次阅读文件 fd=open("test.txt",'r') #获得一个句柄 fd.seek(label,0)# 把文件读取指针移动到之前记录的位置 fd.readline() #接着上次的位置继续向下读取 后续:今儿有一人问我如何得知这个大文件行数,以及变化,我的想法是 方法1: 可以去遍历'\n'字符。 方法2: 从一开始就用for循环fd.readline()进行计数,然后变化的部分(用上文说的seek、tell函数做)再用for循环fd.readline()进行统计增加行数。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python12 文件操作

    Pycharm使用UTF-8格式,而Windows默认是GBK格式,所以默认pycharm是处理不了BGK格式的,所以要要定义使用UTF-8格式打开Windo...

    py3study
  • python教程(八)·文件操作

    由于离高考越来越近,博主打算本篇文章过后,暂停本系列教程的更新,等到高考完后再继续本系列教程,请谅解!

    py3study
  • 收集3:所有文件格式

    A 对象代码库文件 AAM Authorware shocked文件 AAS Authorware shocked包 ABF Adobe二进制屏幕字体 ...

    py3study
  • 文件操作(偏移量)

    通过函数lseek可以改变文件当前的读写位置。 函数原型:        #include <sys/types.h>        #include <un...

    _gongluck
  • 数据挖掘之字段与图解思路整理

    说明: CCU:实时在线曲线 PCU:每日峰值 ACU:平均同时在线人数 DAU:每日活跃账号数(每日总登) MAU:月活跃账号数 RU:首登玩家 ARPPU:...

    学到老
  • 数据挖掘之字段与图解思路整理

    基本上,作为运营人员以上为每天接触的数据指标数量。下面详细的来看每个指标怎么来分析。

    学到老
  • 关于图像的二维卷积各种版本的实现(C++,Cuda和mex)

      卷积的相关知识本文不再描述,网上大把的资源,本文给出二维卷积的各种版本的实现。 C++版本   首先是最常用的C++版本的卷积实现,代码如下: voi...

    深度学习思考者
  • java 反射机制说的透彻一点

    很多时候我们会遇到别人问一个问题:你给我讲一下反射,到底是什么东西?怎么实现的?我们能用反射来做什么?它有什么优缺点?下面我们会围绕着这几个问题展开:

    秦怀杂货店
  • Java 反射,这篇写的很透彻!

    很多时候我们会遇到别人问一个问题:你给我讲一下反射,到底是什么东西?怎么实现的?我们能用反射来做什么?它有什么优缺点?下面我们会围绕着这几个问题展开:

    Java技术栈
  • 学过框架的必看—Java反射

    反射作为 Java 的高级特性,很多框架中都用到了反射的知识,如 Spring,Hibernate等,通过配置就可以动态干预程序的运行,那么什么是反射呢?

    Wizey

扫码关注云+社区

领取腾讯云代金券