python文件读写seek_seek引发的python文件读写的问题

我的需求很简单,就是统计一下我的安装脚本执行的次数和时间,格式是这样的

install_times:1|install_times:2018-09-03 15:58:46

install_times:2|install_times:2018-09-03 15:58:50

install_times:3|install_times:2018-09-03 15:58:54

首先我需要判断一下文件是否为空,我开始是这样写的

import time

import os

file_list = []

tags = False

with open("install_hadoop.txt", "r", encoding="utf-8") as f:

flag = bool(f.readline())

# obj = True

# f.seek(0)

if flag:

tags = True

for obj in f:

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),把指针在设置回到最开始的位置

with open("install_hadoop.txt", "r", encoding="utf-8") as f:

flag = bool(f.readline())

# obj = True

f.seek(0)

if flag:

tags = True

for obj in f:

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的方法来判断文件是否为空

with open("install_hadoop.txt", "r", encoding="utf-8") as f:

flag = bool(f.readline())

# obj = True

f.seek(0)

print(os.path.getsize("install_hadoop.txt"))

if flag:

tags = True

for obj in f:

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的作用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值