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到相应的大小,也可能会添加一些随机内容。
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ python文件的读写09/10
- ♥ python如何对字符串进行切片12/15
- ♥ 经典的python入门好不好?12/27
- ♥ python如何退出循环08/18
- ♥ python如何实现换行符?09/11
- ♥ 分组在python正则表达式中的使用01/04
内容反馈