seek引发的python文件读写的问题及解决


Posted in Python onJuly 26, 2019

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

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
  <strong> f.seek(0)</strong>
  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:<br>  flag = bool(f.readline())<br>  # obj = True<br>  f.seek(0)<br>  <strong>print(os.path.getsize("install_hadoop.txt"))</strong><br>  if flag:<br>    tags = True<br>    for obj in f:<br>      tmp_list = obj.split("|")<br>      file_list.append(tmp_list)<br>    last_times = int(file_list[-1][0].split(":")[1]) + 1<br>    last_time = time.strftime("%Y-%m-%d %H:%M:%S")<br>  else:<br>    last_times = 1<br>    last_time = time.strftime("%Y-%m-%d %H:%M:%S")

至此,这个问题被解决,同时也对python的文件操作有了更深的理解,也明白了python设置seek的作用

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中in在list和dict中查找效率的对比分析
May 04 Python
python 读取鼠标点击坐标的实例
Dec 29 Python
django2.2安装错误最全的解决方案(小结)
Sep 24 Python
python list多级排序知识点总结
Oct 23 Python
python绘制雪景图
Dec 16 Python
tensorflow之变量初始化(tf.Variable)使用详解
Feb 06 Python
Python3 字典dictionary入门基础附实例
Feb 10 Python
使用Bazel编译TensorBoard教程
Feb 15 Python
解决python DataFrame 打印结果不换行问题
Apr 09 Python
Pygame的程序开始示例代码
May 07 Python
python简单实现插入排序实例代码
Dec 16 Python
Pytorch 中net.train 和 net.eval的使用说明
May 22 Python
python经典趣味24点游戏程序设计
Jul 26 #Python
对django后台admin下拉框进行过滤的实例
Jul 26 #Python
python函数的万能参数传参详解
Jul 26 #Python
Python企业编码生成系统之主程序模块设计详解
Jul 26 #Python
Django REST Framework序列化外键获取外键的值方法
Jul 26 #Python
django admin.py 外键,反向查询的实例
Jul 26 #Python
Python企业编码生成系统之系统主要函数设计详解
Jul 26 #Python
You might like
php利用smtp类实现电子邮件发送
2015/10/30 PHP
在Mac OS上编译安装Nginx+PHP+MariaDB开发环境的教程
2016/02/23 PHP
php如何控制用户对图片的访问 PHP禁止图片盗链
2016/03/25 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
php面试中关于面向对象的相关问题
2019/02/13 PHP
Prototype Template对象 学习
2009/07/19 Javascript
javascript 一个函数对同一元素的多个事件响应
2009/07/25 Javascript
js下获得客户端操作系统的函数代码(1:vista,2:windows7,3:2000,4:xp,5:2003,6:2008)
2011/10/31 Javascript
Eclipse下jQuery文件报错出现错误提示红叉
2014/01/13 Javascript
javascript动态向网页中添加表格实现代码
2014/02/19 Javascript
果断收藏9个Javascript代码高亮脚本
2016/01/06 Javascript
JavaScript实现经纬度转换成地址功能
2017/03/28 Javascript
详解cordova打包成webapp的方法
2017/10/18 Javascript
基于Vue的延迟加载插件vue-view-lazy
2018/05/21 Javascript
node跨域转发 express+http-proxy-middleware的使用
2018/05/31 Javascript
VUE项目初建和常见问题总结
2019/09/12 Javascript
Vue 封装防刷新考试倒计时组件的实现
2020/06/05 Javascript
python中__call__方法示例分析
2014/10/11 Python
python3 实现的人人影视网站自动签到
2016/06/19 Python
Python max内置函数详细介绍
2016/11/17 Python
Python编程之event对象的用法实例分析
2017/03/23 Python
Python cookbook(数据结构与算法)从字典中提取子集的方法示例
2018/03/22 Python
python爬虫 爬取58同城上所有城市的租房信息详解
2019/07/30 Python
tensorflow基于CNN实战mnist手写识别(小白必看)
2020/07/20 Python
大学生求职推荐信
2013/11/27 职场文书
捐款倡议书格式范文
2014/05/14 职场文书
学习作风建设心得体会
2014/10/22 职场文书
离婚协议书范本2014
2014/10/27 职场文书
夫妻忠诚协议范文
2014/11/16 职场文书
社区五一劳动节活动总结
2015/02/09 职场文书
哪类餐饮行业,最适合在高校创业?
2019/08/19 职场文书
Redis读写分离搭建的完整步骤
2021/09/14 Redis
SQL SERVER实现连接与合并查询
2022/02/24 SQL Server
vue 数字翻牌器动态加载数据
2022/04/20 Vue.js
Windows Server 2008 修改远程登录端口以及配置防火墙
2022/04/28 Servers
Python+Pillow+Pytesseract实现验证码识别
2022/05/11 Python