Python 读取大文件 最后几行

方法一:

# -*- coding: utf-8 -*-
import sys
import os
import string

RCV_LOG = r"d:\c.txt"

def get_last_n_lines(logfile, n):
    n = string.atoi(n)
    blk_size_max = 4096
    n_lines = []
    with open(logfile, ‘rb‘) as fp:
        fp.seek(0, os.SEEK_END)
        cur_pos = fp.tell()
        while cur_pos > 0 and len(n_lines) < n:
            blk_size = min(blk_size_max, cur_pos)
            fp.seek(cur_pos - blk_size, os.SEEK_SET)
            blk_data = fp.read(blk_size)
            assert len(blk_data) == blk_size
            lines = blk_data.split(‘\n‘)

            # adjust cur_pos
            if len(lines) > 1 and len(lines[0]) > 0:
                n_lines[0:0] = lines[1:]
                cur_pos -= (blk_size - len(lines[0]))
            else:
                n_lines[0:0] = lines
                cur_pos -= blk_size

            fp.seek(cur_pos, os.SEEK_SET)

    if len(n_lines) > 0 and len(n_lines[-1]) == 0:
        del n_lines[-1]
    return n_lines[-n:]

get_last_n_lines(RCV_LOG, "5")

  

时间: 2024-10-07 07:41:33

Python 读取大文件 最后几行的相关文章

python读取大文件

最近在学习python的过程中接触到了python对文件的读取.python读取文件一般情况是利用open()函数以及read()函数来完成: f = open(filename,'r') f.read() 这种方法读取小文件,即读取远远大小小于内存的文件显然没有什么问题.但是如果是将一个10G大小的日志文件读取,即文件大于内存的大小,这么处理就有问题了,会造成MemoryError ... 也就是发生内存溢出. 发生这种错误的原因在于,read()方法执行操作是一次性的都读入内存中,显然文件大

python 读取大文件

要读取个大文件,文件大概是3G左右,担心read会出现内存溢出的情况,网上找了个靠谱的用法: with open(...) as f: for line in f: <do something with line> The with statement handles opening and closing the file, including if an exception is raised in the inner block. The for line in f treats the

python读取大文件的方法

python计算文件的行数和读取某一行内容的实现方法 :最简单的办法是把文件读入一个大的列表中,然后统计列表的长度.如果文件的路径是以参数的形式filepath传递的,那么只用一行代码就可以完成我们的需求了: 1.http://blog.csdn.net/shudaqi2010/article/details/54017766 2.https://www.cnblogs.com/yu-zhang/p/5949696.html 3.http://blog.csdn.net/churximi/art

python 读取cvs 文件中多行数据

有的时候我们需要去读取多行多列数据 def duqu(): yiyuan = open('yiyuan_id2.csv','r') lines = yiyuan.readlines() yiyuan.close() for line in lines: id = line.split(',')[0] name = line.split(',')[1] print(id,name)duqu() 1.定义读取函数2.定义变量yiyuan,以只读的方式打开文件3.定义变量lines,通过读取多行数据赋

python 读取大文件越来越慢(判断 key 在 map 中,千万别用 in keys())

背景: 今天乐乐姐写代码,读取一个四五百兆的文件,然后做一串的处理.结果处理了一天还没有出来结果.问题出在哪里呢? 解决: 1. 乐乐姐打印了在不同时间点的时间,直接print time() 即可.发现一个规律,执行速度是越来越慢的. 2. 为什么会越来越慢呢? 1)可能原因1,GC 的问题,有篇文章里面写,python list append 的时候会越来越慢,解决方案是禁止GC: 使用 gc.disable()和gc.enable() 2)改完上面,仍然不行,然后看到一篇文章里面写,可能是因

Python 读取大文件的方式

对于读取容量小的文件,可以使用下面的方法: with open("path", "r") as f: f.read() 但是如果文件容量很大,高达几个G或者十几个G,使用上面这种方式就容易造成内存溢出的问题,所以如果进行大容量的文件读取建议使用下面这种方式: with open("path", "r") as f: # f 是一个可迭代的文件对象 for line in f: # 以行为单位进行读取 print(line) 原

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

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

3分钟学会,学会用Python正确读取大文件

文件读写属于一种常见的IO操作,由于操作系统将底层操作磁盘的接口向上封装为一种通用接口,因此Python中读写文件的基本方法和JAVA.PHP等高级编程语言一样,先请求操作系统打开一个文件描述符,通过操作系统提供的接口从这个文件对象中读取数据,或者把数据写入这个文件中,最后当文件读写操作完成后关闭文件. 需要注意的是文件读写完成后必须及时关闭文件,一方面打开的文件会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限制的,比如Linux操作系统中我们可以使用ulimit -n命令查看

[获取行数]php读取大文件提供性能的方法,PHP的stream_get_line函数读取大文件获取文件的行数的方...

背景: 下面是获取文件的行数的方法: 一个文件如果知道有几行的话,就可以控制获取一定的行数的数据,然后放入数据库.这样不管的读取大文件的性能,还是写入数据库的性能,都能得到很大的提高了. 下面是获取文件的行数的方法 $temp_file = 'error.log'; $fp = fopen($temp_file ,'r') or die("open file failure!"); $total_line = 0; if($fp){     /* 获取文件的一行内容,注意:需要php5