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对文件操作知识汇总
May 15 Python
opencv改变imshow窗口大小,窗口位置的方法
Apr 02 Python
通过Python模块filecmp 对文件比较的实现方法
Jun 29 Python
Python中文编码知识点
Feb 18 Python
Django 数据库同步操作技巧详解
Jul 19 Python
Python的Tkinter点击按钮触发事件的例子
Jul 19 Python
浅析python 中大括号中括号小括号的区分
Jul 29 Python
python字符串格式化方式解析
Oct 19 Python
Python定时从Mysql提取数据存入Redis的实现
May 03 Python
python中如何使用虚拟环境
Oct 14 Python
python通配符之glob模块的使用详解
Apr 24 Python
Django如何创作一个简单的最小程序
May 12 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面向对象的使用教程 简单数据库连接
2006/11/25 PHP
PHP 的ArrayAccess接口 像数组一样来访问你的PHP对象
2010/10/12 PHP
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。
2011/06/24 PHP
PHP实现模仿socket请求返回页面的方法
2014/11/04 PHP
PHP自带方法验证邮箱是否存在
2016/02/01 PHP
PHP扩展框架之Yaf框架的安装与使用
2016/05/18 PHP
浅谈php中curl、fsockopen的应用
2016/12/10 PHP
PHP chr()函数讲解
2019/02/11 PHP
PHP实现抽奖功能实例代码
2020/06/30 PHP
JAVASCRIPT  THIS详解 面向对象
2009/03/25 Javascript
了解jQuery技巧来提高你的代码
2010/01/08 Javascript
JavaScript instanceof 的使用方法示例介绍
2013/10/23 Javascript
javascript创建和存储cookie示例
2014/01/07 Javascript
引入JS文件IE6报语法错误或缺少对象问题的解决方法
2014/01/09 Javascript
理解Javascript图片预加载
2016/02/23 Javascript
实例剖析AngularJS框架中数据的双向绑定运用
2016/03/04 Javascript
react实现pure render时bind(this)隐患需注意!
2017/03/09 Javascript
JavaScript实现修改伪类样式
2017/11/27 Javascript
详解angularjs实现echart图表效果最简洁教程
2017/11/29 Javascript
JS操作json对象key、value的常用方法分析
2019/10/29 Javascript
python flask 多对多表查询功能
2017/06/25 Python
图解Python变量与赋值
2018/04/03 Python
谈谈Python中的while循环语句
2019/03/10 Python
python pytest进阶之xunit fixture详解
2019/06/27 Python
python爬虫的一个常见简单js反爬详解
2019/07/09 Python
Python3网络爬虫开发实战之极验滑动验证码的识别
2019/08/02 Python
python查看矩阵的行列号以及维数方式
2020/05/22 Python
Sixt美国租车:高端豪华车型自驾体验
2017/09/02 全球购物
家庭户外服装:Hawkshead
2017/11/02 全球购物
char型变量中能不能存贮一个中文汉字
2015/07/08 面试题
如何提高SQL Server的安全性
2016/07/25 面试题
销售工作岗位职责
2013/12/24 职场文书
数控技术应用个人求职信范文
2014/02/03 职场文书
餐饮业员工工作决心书
2014/03/11 职场文书
2015年乡镇食品安全工作总结
2015/10/22 职场文书
Prometheus 监控MySQL使用grafana展示
2021/08/30 MySQL