先提供两种提取最后一行文本的方案:
读取小文件时:
with open('dict.text', 'r') as fp:
lines = fp.readlines()
last_line = lines[-1]
print(last_line)
读取大文件时:
fname = 'dict.text'
with open(fname, 'rb') as f: # 打开文件
first_line = f.readline() # 读第一行
off = -50 # 设置偏移量
while True:
f.seek(off, 2) # seek(off, 2)表示文件指针:从文件末尾(2)开始向前50个字符(-50)
lines = f.readlines() # 读取文件指针范围内所有行
if len(lines) >= 2: # 判断是否最后至少有两行,这样保证了最后一行是完整的
last_line = lines[-1] # 取最后一行
break
# 如果off为50时得到的readlines只有一行内容,那么不能保证最后一行是完整的
# 所以off翻倍重新运行,直到readlines不止一行
off *= 2
print(last_line)
以上两种方式在实测的时候如果文件最后存在空行,都不会实际输出空行,如下:
可见文件中存在空行但是最后的输出却不是空行,而是倒数第二行存在内容的一行。
这问题也是前两天开发机器人的补码模块的时候发现的问题,百度之后发现所给的文章都不大适合我这种7天python新手,于是自行进行写入读取 发现如果最后一行存在空行,那么是存在一个换行符的,当然明面上是看不到的,于是修正代码如下:
with open('dict.text', 'r') as fp:
lines = fp.readlines()
last_line = lines[-1]
if '\n' in last_line: #使用in判断last_lines是否存在换行符
print("存在空行")
else:
print(last_line)
结果如下:
存在空行时会提示存在空行,修改文件,删除最后的空行,结果如下:
这时已经正确的判断了文件最后一行是否存在空行。