知行编程网知行编程网  2022-08-18 12:30 知行编程网 隐藏边栏  1,779 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于python如何读取文件中的某几行的相关知识,包括python读取csv某一行,以及python获取文件行数这些编程知识,希望对大家有参考作用。

如何在python中读取文件中的某些行

python读取文件的指定行,可以使用以下的方法

1、os.mknod(“test.txt”) #创建空文件

2. fp = open("test.txt",w) #直接打开一个文件,如果文件不存在,则创建文件

3、open 模式

在处理文件的时候,一个常见的需求就是读取文件的指定行内容,那么如何实现呢?

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.注意边界条件的处理,比如文件只有一行的情况。

fp.read([size]) #size为读取的长度,以byte为单位

fp.readline([size]) #读取一行,如果定义了size,可以只返回一行的一部分

fp.readlines([size]) #将文件的每一行作为列表的成员,返回列表。实际上,它是通过循环调用 readline() 来实现的。如果提供了size参数,size就是读取内容的总长度,也就是说可以只读取文件的一部分。

fp.write(str) #把str写到文件中,write()并不会在str后加上一个换行符

fp.writelines(seq) #将seq的所有内容写入文件(一次写入多行)。此函数也只是忠实地写入,并且不会在每一行之后附加任何内容。

fp.close() #关闭文件。 Python会在一个文件不用后自动关闭,但是这个功能不保证,最好自己养成关闭的习惯。如果文件在关闭后对其进行操作,则会引发 ValueError

fp.flush() #把缓冲区的内容写入硬盘

fp.fileno() #返回一个长整型的”文件标签“

fp.isatty() #文件是否是一个终端设备文件(unix系统中的)

fp.tell() #返回文件操作标记的当前位置,以文件开头为原点

fp.next() #返回下一行,将文件操作标记移动到下一行。当一个文件在for ... in file等语句中使用时,调用next()函数实现遍历。

fp.seek(offset[,whence]) #将文件命中操作标记移动到偏移位置。这个偏移量一般是相对于文件开头计算的,一般是一个正数。但是,如果提供了 wherece 参数,则不一定。 wherece可以为0从头开始计算,1以当前位置为原点进行计算。 2表示以文件结尾为原点进行计算。需要注意的是,如果以a或a+方式打开文件,每次执行写操作时,文件操作标记会自动返回到文件末尾。

fp.truncate([size]) # 将文件剪切到指定大小,默认剪切到当前文件操作标记的位置。如果大小大于文件大小,根据系统的不同,文件可能不会被改变,或者文件可能会填充0到相应的大小,也可能会添加一些随机内容。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享