精华内容
下载资源
问答
  • python读取文件最后一行
    千次阅读
    2021-01-20 17:37:41

    处理文件时,一个常见的需求就是读取文件的最后一行。那么这个需求用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 None
            else:
                with open(filename 'rb') as fp: # to use seek from end, must uss mode 'rb'
                    offset = -8            # initialize offset
                    while -offset < filesize:  # offset cannot exceed file size
                        fp.seek(offset, 2)   # read # offset chars from eof(represent by number '2')
                        lines = fp.readlines()   # read from fp to eof
                        if len(lines) >= 2:  # if contains at least 2 lines
                            return lines[-1]   # then last line is totally included
                        else:
                            offset *= 2    # enlarge offset
                    fp.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读取文件最后一行两种方法

    千次阅读 2020-11-20 21:31:17
    读取文件,把文件所有读入内存。遍历所有,提取指定的数据。优点:简单,方便缺点:当文件大了以后时间太慢,无法忍受2)推荐方法:步骤:open打开日志文件。移动文件读取指针到文件末尾。从后往前移动指针...

    1)常规方法:从前往后依次读取

    步骤:open打开文件。

    读取文件,把文件所有行读入内存。

    遍历所有行,提取指定行的数据。

    优点:简单,方便

    缺点:当文件大了以后时间太慢,无法忍受

    2)推荐方法:

    步骤:open打开日志文件。

    移动文件读取指针到文件末尾。

    从后往前移动指针直到合适的位置。

    读取文件,提取指定行的数据。

    优点:时间相对固定,适合处理大文件

    代码实现:

    ContractedBlock.gif

    ExpandedBlockStart.gif

    1 fname = 'test.html'

    2 with open(fname, 'r', encoding='utf-8') as f: #打开文件

    3 lines = f.readlines() #读取所有行

    4 first_line = lines[0] #取第一行

    5 last_line = lines[-1] #取最后一行

    6 print('文件' + fname + '第一行为:'+first_line)7 print('文件' + fname + '最后一行为:' +last_line)8

    9

    10 with open(fname, 'rb') as f: #打开文件

    11 #在文本文件中,没有使用b模式选项打开的文件,只允许从文件头开始,只能seek(offset,0)

    12 first_line = f.readline() #取第一行

    13 offset = -50 #设置偏移量

    14 whileTrue:15 """

    16 file.seek(off, whence=0):从文件中移动off个操作标记(文件指针),正往结束方向移动,负往开始方向移动。17 如果设定了whence参数,就以whence设定的起始位为准,0代表从头开始,1代表当前位置,2代表文件最末尾位置。18 """

    19 f.seek(offset, 2) #seek(offset, 2)表示文件指针:从文件末尾(2)开始向前50个字符(-50)

    20 lines = f.readlines() #读取文件指针范围内所有行

    21 if len(lines) >= 2: #判断是否最后至少有两行,这样保证了最后一行是完整的

    22 last_line = lines[-1] #取最后一行

    23 break

    24 #如果off为50时得到的readlines只有一行内容,那么不能保证最后一行是完整的

    25 #所以off翻倍重新运行,直到readlines不止一行

    26 offset *= 2

    27 print('文件' + fname + '第一行为:' +first_line.decode())28 print('文件' + fname + '最后一行为:' + last_line.decode())

    View Code

    展开全文
  • Python实现读取文件最后n的方法

    千次阅读 2021-02-04 14:38:08
    本文实例讲述了Python实现读取文件最后n的方法。分享给大家供大家参考,具体如下:# -*- coding:utf8-*-import osimport timeimport datetimeimport mathimport stringdef get_last_line(inputfile) :filesize = ...

    本文实例讲述了Python实现读取文件最后n行的方法。分享给大家供大家参考,具体如下:

    # -*- coding:utf8-*-

    import os

    import time

    import datetime

    import math

    import string

    def get_last_line(inputfile) :

    filesize = os.path.getsize(inputfile)

    blocksize = 1024

    dat_file = open(inputfile, 'r')

    last_line = ""

    lines = dat_file.readlines()

    count = len(lines)

    if count>60:

    num=60

    else:

    num=count

    i=1;

    lastre = []

    for i in range(1,(num+1)):

    if lines :

    n = -i

    last_line = lines[n].strip()

    #print "last line : ", last_line

    dat_file.close()

    #print i

    lastre.append(last_line)

    return lastre

    #获取最后一行的结果

    re = get_last_line('../update/log/rtime/rtime20130805.log')

    print len(re)

    for n in re:

    strlist = n.split(' ')

    if strlist[1] == 'ok' and string.atoi(strlist[2])>1000:

    print '数据条数正常'

    print 'OK'

    else:

    print '数据太少,检查发邮件'

    以上处理和日志文件格式为

    2013-08-05 16:09:30 ok 1673

    2013-08-05 16:10:34 ok 1628

    2013-08-05 16:11:55 ok 71

    2013-08-05 16:13:02 ok 1441

    2013-08-05 16:14:06 ok 1634

    2013-08-05 16:15:10 ok 1717

    2013-08-05 16:16:14 ok 1687

    2013-08-05 16:17:18 ok 1642

    2013-08-05 16:18:27 ok 1655

    2013-08-05 16:19:33 ok 1655

    读取最后一行:

    #返回文件最后一行函数

    def get_last_line(inputfile) :

    filesize = os.path.getsize(inputfile)

    blocksize = 1024

    dat_file = open(inputfile, 'r')

    last_line = ""

    if filesize > blocksize :

    maxseekpoint = (filesize // blocksize)

    dat_file.seek((maxseekpoint-1)*blocksize)

    elif filesize :

    #maxseekpoint = blocksize % filesize

    dat_file.seek(0, 0)

    lines = dat_file.readlines()

    if lines :

    last_line = lines[-1].strip()

    #print "last line : ", last_line

    dat_file.close()

    return last_line

    希望本文所述对大家Python程序设计有所帮助。

    展开全文
  • 利用Python读取文件(针对大文件和小文件两种)的首行(第一行)和末行(最后一行)。脚本借鉴了前人的两种处理思路(在下面的脚本中有注释说明引用出处),并修正了原先两种处理方法中如果文件末尾含有多个空行而...

    利用Python读取文件(针对大文件和小文件两种)的首行(第一行)和末行(最后一行)。脚本借鉴了前人的两种处理思路(在下面的脚本中有注释说明引用出处),并修正了原先两种处理方法中如果文件末尾含有多个空行而返回空行的问题。

    脚本内容可以从GitHub上获取:

    脚本内容如下:#!/usr/bin/python

    # encoding: utf-8

    # -*- coding: utf8 -*-

    """

    Created by PyCharm.

    File: LinuxBashShellScriptForOps:getFileLastLine.py

    User: Guodong

    Create Date: 2016/9/1

    Create Time: 11:05

    """

    import os

    # Refer: http://www.pythonclub.org/python-files/last-line

    def get_last_line(inputfile):

    filesize = os.path.getsize(inputfile)

    blocksize = 1024

    dat_file = open(inputfile, 'rb')

    last_line = ""

    if filesize > blocksize:

    maxseekpoint = (filesize // blocksize)

    dat_file.seek((maxseekpoint - 1) * blocksize)

    elif filesize:

    # maxseekpoint = blocksize % filesize

    dat_file.seek(0, 0)

    lines = dat_file.readlines()

    if lines:

    last_line = lines[-1].strip()

    # print "last line : ", last_line

    dat_file.close()

    return last_line

    # Refer: http://code.activestate.com/recipes/578095/

    def print_first_last_line(inputfile):

    filesize = os.path.getsize(inputfile)

    blocksize = 1024

    dat_file = open(inputfile, 'rb')

    headers = dat_file.readline().strip()

    if filesize > blocksize:

    maxseekpoint = (filesize // blocksize)

    dat_file.seek(maxseekpoint * blocksize)

    elif filesize:

    maxseekpoint = blocksize % filesize

    dat_file.seek(maxseekpoint)

    lines = dat_file.readlines()

    if lines:

    last_line = lines[-1].strip()

    # print "first line : ", headers

    # print "last line : ", last_line

    return headers, last_line

    # My Implementation

    def get_file_last_line(inputfile):

    filesize = os.path.getsize(inputfile)

    blocksize = 1024

    with open(inputfile, 'rb') as f:

    last_line = ""

    if filesize > blocksize:

    maxseekpoint = (filesize // blocksize)

    f.seek((maxseekpoint - 1) * blocksize)

    elif filesize:

    f.seek(0, 0)

    lines = f.readlines()

    if lines:

    lineno = 1

    while last_line == "":

    last_line = lines[-lineno].strip()

    lineno += 1

    return last_line

    # Test purpose

    # print get_last_line(os.path.abspath(__file__))

    # print print_first_last_line(os.path.abspath(__file__))

    # print get_file_last_line(os.path.abspath(__file__))

    --end--

    展开全文
  • python读取文件最后一行两种方式1)常规方法:从前往后依次读取步骤:open打开文件。读取文件,把文件所有行读入内存。遍历所有行,提取指定行的数据。优点:简单,方便缺点:当文件大了以后时间太慢,无法忍受2)...
  • 我正在尝试使用python获取csv文件最后一个值的列表。这些都有五个单元格,但它们的填充不一致。有的有个、两个、三个或四个牢房,其余的都是空的。以下是csv文件的摘录:art and entertainment,books and ...
  • python读取文件中的一行

    千次阅读 2021-03-07 23:27:17
    def readlinefile(): ...#读取一行,也可以传入要读取的字符数,不传则读取整行 filelist[‘readlink’] = handle.readline() handle.seek(0,0) #恢复文件指针位置 #读取文件多有行,保存在一个列表中 filelist[‘rea
  • Python中readline()每次读取文件中的一行,需要使用永真...以上就是小千为大家整理的python读取一行一行文件内容的方法,希望上面的介绍能够帮助到大家。如果您想了解更多关于Python知识的相关资料及信息,可以关注
  • #!/usr/bin/python # -*- coding: UTF-8 -*- # 打开一个文件 fo = open("foo.txt", ... # 写入 \n 表示换行 一行一行的写入 fo1 = open("foo.txt", "r+") #打开一个文件用于读写。文件指针将会放在文件的开头。 str =
  • python读取一行,读取最后一行

    千次阅读 2022-01-24 12:34:02
    with open("est.txt","r",encoding="utf-8") as f: r = f.readlines() print(r[0]) # 读第一行 with open("est.txt","r",encoding="utf-8") as f: r = f.readlines() ... print(r[-1]) # 读最后一行
  • 广告关闭2017年12月,云+社区对外发布...pos = pos - 1 try: f.seek(pos, 2) #从文件末尾开始读 if f.read(1) == n:break except: #到达文件一行,直接读取,退出 f.seek(0, 0) print f.readline().strip() retur...
  • 本文实例讲述了Python实现读取文件最后n的方法。分享给大家供大家参考,具体如下:# -*- coding:utf8-*-import osimport timeimport datetimeimport mathimport stringdef get_last_line(inputfile) :filesize = ...
  • python读取文件获取其中一行的数据

    千次阅读 2021-04-16 10:54:44
    test.txt文件 CCCF110 0003E818 0003E1FC 0003E770 0003FFFC 12 CCCF110 0003E824 0003E208 0003E76C 0003FFFC 8A CCCF110 0003E814 0003E204 0003E760 0003FFFC 80 CCCF110 0003E7F0 0003E208 0003E764 0003FFFC ...
  • python如何读取文件的每一行

    千次阅读 2022-03-13 11:57:24
    python还是很easy的,业务急,这里简单的介绍种哈; with open('file_path') as f: for line in f.readlines():##readlines(),函数把所有的读取进来; img_file = line.strip()##删除后的换符,img_...
  • 本文要点刚要:()读文本文件格式的数据函数:...跳行读取文本文件,用skiprows5.数据太大时需要逐块读取文本数据用chunksize进行分块。(二)将数据写成文本文件格式函数:to_csv范例如下:(读取文本文件格...
  • python 读取文本文件遍历每一行

    千次阅读 2021-12-09 14:40:25
    本文将利用readlines 读取 以txt为格式的文本文件里的内容, 将每一行提取出来 把每一行的前导/尾随空格符删除 并将每一行存入了列表中。 利用strip split 等python自带的字符串处理函数 准备文件txt 测试代码 fo1 =...
  • 在使用python处理文本的时候,经常会需要读取文件的内容。如果文件比较小,那么直接使用open文件对象打开文件,再通过read()方法最为方便,这种方法就是把文件内容读出来后放到内存变量。readf = open('/var/log/...
  • python里面,读取或写入csv文件时,首先要import csv这个库,然后利用这个库提供的方法进行对文件的读写。 1、获取每一行 读取csv文件,用的是csv.reader()这个方法。返回结果是一个_csv.reader的对象,我们可以对...
  • Python 读取txt文件一行数据生成列表Python 读取txt文件一行数据生成列表本意是将数据:改为如下形式:[['push', 'lea', 'push', 'mov', 'call', 'mov', 'mov', 'pop', 'retn', 'mov', 'jmp', 'push', 'mov', '...
  • 一行一行得从文件读数据,显然比较慢;不过很省内存带缓存的文件读取 readlines 速度最快1. 最基本的读文件方法:?# File: readline-example-1.pyfile = open("sample.txt")while 1:line = file.readline...
  • 文件小时,直接将所有行作为list读取 ...输出为:文件一行最后一行 ''' fname = 'test.txt' with open(fname, 'r') as f: #打开文件 lines = f.readlines() #读取所有行 first_line = lines[0] #取第一行 ...
  • python读取文本某一行内容

    万次阅读 2020-03-19 14:56:52
    时常遇到需要读取文本的指定某一行或者某几行的内容。总结方法有两种。 方法一:从头扫描,跳过不关心的行 import linecache linecache.getline('./data.txt', 5) 读取文件的第5行,实际该文件会整个缓存起来,...
  • [work] python读取txt文件最后一行

    千次阅读 2019-01-11 11:57:46
    txt文件小 ...输出为:文件一行最后一行 ''' fname = 'test.txt' with open(fname, 'r') as f: #打开文件 lines = f.readlines() #读取所有行 first_line = lines[0] #取第一行 last_line = l...
  • Python读取csv文件的某一行

    千次阅读 2021-03-11 13:29:03
    Python读取csv文件的某一行reader函数DictReader 站长用Python写了一个可以提取csv任一列的代码,欢迎使用。Github链接 csv是Comma-Separated Values的缩写,是用文本文件形式储存的表格数据,比如如下的表格,就...
  • python读取txt文件的每一行,并输出

    千次阅读 2021-06-03 16:35:09
    import imageio import numpy as np ... line = f.readline() #包括换符 line = line[:-1] #去掉换符 if line: print (line) img = np.asarray(imageio.imread(os.path.join('F:\\VOCdevkit\

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 219,260
精华内容 87,704
关键字:

python读取文件最后一行