处理文件时,一个常见的需求就是读取文件的最后一行。那么这个需求用python怎么实现呢?一个朴素的想法如下:

with open('a.log', 'r') as fp:lines = fp.readlines()last_line = lines[-1]

即使不考虑异常处理的问题,这个代码也不完美,因为如果文件很大,lines = fp.readlines()会造成很大的时间和空间开销。

解决的思路是用将文件指针定位到文件尾,然后从文件尾试探出一行的长度,从而读取最后一行。代码如下:

def __get_last_line(self, filename):"""get last line of a file:param filename: file name:return: last line or None for empty file"""try:filesize = os.path.getsize(filename)if filesize == 0:return Noneelse:with open(filename 'rb') as fp: # to use seek from end, must uss mode 'rb'offset = -8            # initialize offsetwhile -offset < filesize:  # offset cannot exceed file sizefp.seek(offset, 2)   # read # offset chars from eof(represent by number '2')lines = fp.readlines()   # read from fp to eofif len(lines) >= 2:  # if contains at least 2 linesreturn lines[-1]   # then last line is totally includedelse:offset *= 2    # enlarge offsetfp.seek(0)lines = fp.readlines()return lines[-1]except FileNotFoundError:print(filename + ' not found!')return None

其中有几个注意点:

1.fp.seek(offset[, where])中where=0,1,2分别表示从文件头,当前指针位置,文件尾偏移,缺省值为0,但是如果要指定where=2,文件打开的方式必须是二进制打开,即使用'rb'模式

2.设置偏移量时注意不要超过文件总的字节数,否则会报OSError.

3.注意边界条件的处理,比如文件只有一行的情况。

python读取文件最后一行相关推荐

  1. python读取文件第一行_python读取文件首行和最后一行

    python读取文件最后一行两种方式 1)常规方法:从前往后依次读取 步骤:open打开文件. 读取文件,把文件所有行读入内存. 遍历所有行,提取指定行的数据. 优点:简单,方便 缺点:当文件大了以后 ...

  2. python读取文件某一行-python计算文件的行数和读取某一行内容的实现方法

    一.计算文件的行数 最简单的办法是把文件读入一个大的列表中,然后统计列表的长度.如果文件的路径是以参数的形式filepath传递的,那么只用一行代码就可以完成我们的需求了: count = len(o ...

  3. python读取文件某一行-python和shell读取文件某一行

    python和shell(awk命令) 可以实现直接读取文件的某一行,按行号进行读取 .并可以精准的取得该行的某个字段,这个有点类似于x轴.y轴定位某个点的操作. 一.awk取某行某列值 awk 可以 ...

  4. python读取文件某一行-使用python读取.text文件特定行的数据方法

    如何用python循环读取下面.txt文件中,用红括号标出来的数据呢? 首先,观察数据可知,不同行的第一个数据元素不一样,所以考虑直接用正则表达式. 再加上,对读和写文件的操作,就行了 注:我用的是p ...

  5. python将文件另存为,python读取文件另存为

    解决 python 读取文件乱码问题(UnicodeDecodeError) 解决 python 读取文件乱码问题(UnicodeDecodeError) 确定你的文件的编码,下面的代码将以'utf- ...

  6. python读取文件中的一行

    python读取文件 readline()方法,读取一行文件 readlines()方法,读取多行文件,保存到一个列表中 文件内容: filepath = 'test4.txt' handle = o ...

  7. python读取文件第n行-python读取文件第n行

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. pos = pos - 1 try: f.seek(pos, 2) #从 ...

  8. python读取文件第n行-Python读取文件后n行的代码示例

    这篇文章主要介绍了Python实现读取文件最后n行的方法,涉及Python针对文件的读取.遍历与运算相关操作技巧,需要的朋友可以参考下# -*- coding:utf8-*- import os im ...

  9. python读取文件-python读取大文件

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

最新文章

  1. 采用串口DMA双缓冲方法,快速更新外部FLASH中文字库
  2. C++ new一个数组方法和初始化的方法
  3. 一次短信验证码攻击的应急响应
  4. 怪兽级性能,用代码玩转Excel!葡萄城强势发布Spread表格组件
  5. linux 读写权限
  6. 左对齐 latex_LaTex中使用XYpic绘制交换图表
  7. python爬虫实例1:获取一个网页的列表数据
  8. Android开发屏幕适配
  9. selenium与firefox、 chrome版本对应关系
  10. Docker网桥模式ping不通宿主机
  11. Deep Light Enhancement without Paired Supervision (非配对数据监督学习用于低曝光图像增强)
  12. 华为云区块链的跨云联通能力构建
  13. 淘宝HTML5版私钥泄漏
  14. TensorFlow实现mnist书写数字分类,出现please use urllib or similar directly错误。
  15. Android Studio清单文件合并规则
  16. 用python打印几种三角形的排列
  17. Please, configure Web Facet first!
  18. Canvas和SVG的区别
  19. python取元素_python 如何提取对象内的元素
  20. python爬虫专家_Python爬虫入门教程:微医挂号网专家团队数据抓取pyspider

热门文章

  1. MongoDB学习笔记(一)环境搭建与常用操作
  2. java中final的意义
  3. AtomicLong和LongAdder的区别
  4. JavaScript模块化不算漫长的发展史
  5. 在一个电子商务网站应用中,涉及的实体信息类有很多,比如用户类User和用户地址类Address; 而每一个实体类的对象信息要存储到相应的数据库表中,如userTable和addressTable。
  6. [leetcode] 72.编辑距离
  7. java的解释程序_JAVA改错和程序解释
  8. python链表和树实验报告_关于Python实现树结构和链表结构的一点想法
  9. docker-Consul的概述及consul集群环境的搭建
  10. 华为S5700系列交换机配置文件导出、导入