seek引发的python文件读写的问题及解决
我的需求很简单,就是统计一下我的安装脚本执行的次数和时间,格式是这样的
install_times:1|install_times:2018-09-0315:58:46 install_times:2|install_times:2018-09-0315:58:50 install_times:3|install_times:2018-09-0315:58:54
首先我需要判断一下文件是否为空,我开始是这样写的
importtime importos file_list=[] tags=False withopen("install_hadoop.txt","r",encoding="utf-8")asf: flag=bool(f.readline()) #obj=True #f.seek(0) ifflag: tags=True forobjinf: tmp_list=obj.split("|") file_list.append(tmp_list) last_times=int(file_list[-1][0].split(":")[1])+1 last_time=time.strftime("%Y-%m-%d%H:%M:%S") else: last_times=1 last_time=time.strftime("%Y-%m-%d%H:%M:%S")
先通过f.readline()读一行文件出来,判断返回的对象是否为真,如果为真,则认为文件不为空,则继续往下走,这里有个问题就是,当我读出来一行后,我的指针的位置到了第一行的末尾,等下在去读文件,直接从第二行去读数据,本来我这里是要读到所有的数据,但是由于seek导致我的数据是从第二行开始的,所以得出来的结果就不对
这里可以有2种办法解决
1、通过f.readline()读一次文件之后,在f.seek(0),把指针在设置回到最开始的位置
withopen("install_hadoop.txt","r",encoding="utf-8")asf: flag=bool(f.readline()) #obj=True f.seek(0) ifflag: tags=True forobjinf: tmp_list=obj.split("|") file_list.append(tmp_list) last_times=int(file_list[-1][0].split(":")[1])+1 last_time=time.strftime("%Y-%m-%d%H:%M:%S") else: last_times=1 last_time=time.strftime("%Y-%m-%d%H:%M:%S")
2、修改判断文件是否为空的方法,采用os.path.getsize的方法来判断文件是否为空
withopen("install_hadoop.txt","r",encoding="utf-8")asf:
flag=bool(f.readline())
#obj=True
f.seek(0)
print(os.path.getsize("install_hadoop.txt"))
ifflag:
tags=True
forobjinf:
tmp_list=obj.split("|")
file_list.append(tmp_list)
last_times=int(file_list[-1][0].split(":")[1])+1
last_time=time.strftime("%Y-%m-%d%H:%M:%S")
else:
last_times=1
last_time=time.strftime("%Y-%m-%d%H:%M:%S")
至此,这个问题被解决,同时也对python的文件操作有了更深的理解,也明白了python设置seek的作用
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。