精华内容
下载资源
问答
  • python读取文件最后一行

    万次阅读 2019-06-21 18:03:07
    处理文件时,一个常见的需求就是读取文件的最后一行。那么这个需求用python怎么实现呢?一个朴素的想法如下: with open('a.log', 'r') as fp: lines = fp.readlines() last_line = lines[-1] 即使不考虑异常处理...

    处理文件时,一个常见的需求就是读取文件的最后一行。那么这个需求用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 use 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读取文件最后一行

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

    python读取文件最后一行两种方式

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

    步骤:open打开文件。

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

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

    优点:简单,方便

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

    2)推荐方法:

    步骤:open打开日志文件。

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

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

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

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

    代码实现

    fname = 'test.html'

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

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

    first_line = lines[0] # 取第一行

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

    print('文件' + fname + '第一行为:'+ first_line)

    print('文件' + fname + '最后一行为:' + last_line)

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

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

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

    offset = -50 # 设置偏移量

    while True:

    """

    file.seek(off, whence=0):从文件中移动off个操作标记(文件指针),正往结束方向移动,负往开始方向移动。

    如果设定了whence参数,就以whence设定的起始位为准,0代表从头开始,1代表当前位置,2代表文件最末尾位置。

    """

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

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

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

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

    break

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

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

    offset *= 2

    print('文件' + fname + '第一行为:' + first_line.decode())

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

    展开全文
  • 一行一行得从文件读数据,显然比较慢;不过很省内存带缓存的文件读取 readlines 速度最快1. 最基本的读文件方法:?# File: readline-example-1.pyfile = open("sample.txt")while 1:line = file.readline...

    一行一行得从文件读数据,显然比较慢;不过很省内存

    带缓存的文件读取 readlines 速度最快

    1. 最基本的读文件方法:

    ?

    # File: readline-example-1.py

    file = open("sample.txt")

    while 1:

    line = file.readline()

    if not line:

    break

    pass # do something

    一行一行得从文件读数据,显然比较慢;不过很省内存。

    在我的机器上读10M的sample.txt文件,每秒大约读32000行

    2. 用fileinput模块

    ?

    # File: readline-example-2.py

    import fileinput

    for line in fileinput.input("sample.txt"):

    pass

    写法简单一些,不过测试以后发现每秒只能读13000行数据,效率比上一种方法慢了两倍多……

    3. 带缓存的文件读取

    ?

    # File: readline-example-3.py

    file = open("sample.txt")

    while 1:

    lines = file.readlines(100000)

    if not lines:

    break

    for line in lines:

    pass # do something

    这个方法真的更好吗?事实证明,用同样的数据测试,它每秒可以读96900行数据!效率是第一种方法的3倍,第二种方法的7倍!

    ————————————————————————————————————————————————————————————

    在Python 2.2以后,我们可以直接对一个file对象使用for循环读每行数据:

    ?

    # File: readline-example-5.py

    file = open("sample.txt")

    for line in file:

    pass # do something

    而在Python 2.1里,你只能用xreadlines迭代器来实现:

    ?

    # File: readline-example-4.py

    file = open("sample.txt")

    for line in file.xreadlines():

    pass # do something

    展开全文
  • python 读取文件最后一行

    千次阅读 2012-02-21 16:58:33
    /usr/bin/env python #-*-coding:utf8-*- #----- william -------- import os,sys,re def readend():  os.chdir('/etc/openvpn/sn10001/etc/')  files = open('server.conf','r')  i = -1

    #!/usr/bin/env python
    #-*-coding:utf8-*-
    #----- william --------
    import os,sys,re


    def readend():

        os.chdir('/etc/openvpn/sn10001/etc/')
        files = open('server.conf','r')
        i = -1                                  
        while True:
            i = i - 1                           
            files.seek(i,2)                     
            if files.read(1) == '\n':          
                 break                          


        print files.readline().strip()       



    if __name__ == "__main__":
        read()
        readend()
    展开全文
  • python读取文件首行和最后一行

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

    千次阅读 2019-06-25 22:01:59
    with open(fname, 'r', encoding='utf-8') as f: # 打开文件 lines = f.readlines() # 读取所有行 first_line = lines[0] # 取第一行 last_line = lines[-1] # 取最后一行 print('文件' + fname...
  • 本文实例讲述了Python实现读取文件最后n的方法。分享给大家供大家参考,具体如下:# -*- coding:utf8-*-import osimport timeimport datetimeimport mathimport stringdef get_last_line(inputfile) :filesize = ...
  • [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读取文件最后一行两种方法

    千次阅读 2018-09-27 13:58:00
    1)常规方法:从前往后依次读取 步骤:open打开文件。... 读取文件,把文件所有读入内存。 遍历所有,提取指定的数据。 优点:简单,方便 缺点:当文件大了以后时间太慢,无法忍受 2)推荐方法:...
  • txt文件小#coding:utf-8 ...输出为:文件第一行最后一行 '''fname = 'test.txt' with open(fname, 'r') as f: #打开文件 lines = f.readlines() #读取所有行 first_line = lines[0] #取第一行 last_line = lines[-
  • python里面,读取或写入csv文件时,首先要import csv这个库,然后利用这个库提供的方法进行对文件的读写。 1、获取每一行 读取csv文件,用的是csv.reader()这个方法。返回结果是一个_csv.reader的对象,我们可以对...
  • 以下是我获取了改文件 pswpath = dev.GetPackageDirPath()+"\\download\\ascii\\"+ipaddr+"\\shadow" 我需要读取shadow的最后一行并且删除它 但不影响其他数据该怎么写
  • 主要介绍了Python实现读取文件最后n的方法,涉及Python针对文件的读取、遍历与运算相关操作技巧,需要的朋友可以参考下
  • python读取文本某一行内容

    千次阅读 2020-03-19 14:56:52
    时常遇到需要读取文本的指定某一行或者某几行的内容。总结方法有两种。 方法一:从头扫描,跳过不关心的行 import linecache linecache.getline('./data.txt', 5) 读取文件的第5行,实际该文件会整个缓存起来,...
  • #!/usr/bin/python # -*- coding: UTF-8 -*- # 打开一个文件 fo = open("foo.txt", ... # 写入 \n 表示换行 一行一行的写入 fo1 = open("foo.txt", "r+") #打开一个文件用于读写。文件指针将会放在文件的开头。 str =
  • python3 读取txt文本最后一行

    万次阅读 2018-06-10 16:59:29
    读取文本最后一行 由字节组成 首先要理解txt文本都是实际由字节组成的,比如对于一个utf-8无BOM编码方式存储的txt文件,如果文件内容为空,那么该txt文件大小为0字节,一个ascii字符占一个字节,一个中文字符占...
  • python读取、写入txt文本内容

    万次阅读 多人点赞 2019-08-22 21:54:28
    python常用的读取文件函数有三种read()、readline()、readlines() 以读取上述txt为例,看一下三者的区别 read() 次性读全部内容 次性读取文本中全部的内容,以字符串的形式返回结果 with open("test.txt", ...
  • Python读取文件中关键字的一行和下一行 filename = 'E:/ETL/舟山.txt' # 读取文件 pos = [] Efield = [] # count = len(open(filename,'r',encoding = 'utf-8').readlines()) # print(count) fout = open('E:/ETL/...
  • python3读取txt文本最后一行的数据

    千次阅读 2019-12-22 18:37:52
    with open('/result/email_result.txt', 'r', encoding='utf-8') as f: lines = f.readlines() # 读取所有行 ... for i in range(len(lines) - 1, -1, -1):#从读取最后一行开始 last_line = lin...
  • 广告关闭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...
  • 文件小的读取方法 with open("a1.txt","r",encoding="gbk") as f: r = f.readlines() ... print(r[-1]) # 读最后一行 文件大的读取方法 with open("a1.txt","rb") as f: print(f.readline().decode...
  • python读取文件最后n

    千次阅读 2013-08-05 19:47:00
    读取最后一行: #返回文件最后一行函数 def get_last_line(inputfile) : filesize = os.path.getsize(inputfile) blocksize = 1024 dat_file = open(inputfile, 'r') last_line = "" if filesize > block...
  • python每次读取文件一行输出一行

    千次阅读 2019-09-19 13:27:59
    f=open('test.txt','r') forlineinf: pass printi f.close() 转载于:https://my.oschin...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 208,775
精华内容 83,510
关键字:

python读取最后一行

python 订阅