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标准库os.path包、glob包使用实例
Nov 25 Python
Python3 能振兴 Python的原因分析
Nov 28 Python
Python的Django框架中的数据库配置指南
Jul 17 Python
python 把数据 json格式输出的实例代码
Oct 31 Python
pytorch + visdom CNN处理自建图片数据集的方法
Jun 04 Python
浅谈python连续赋值可能引发的错误
Nov 10 Python
对IPython交互模式下的退出方法详解
Feb 16 Python
Python闭包和装饰器用法实例详解
May 22 Python
python实现远程控制电脑
May 23 Python
Pytorch十九种损失函数的使用详解
Apr 29 Python
python常见的占位符总结及用法
Jul 02 Python
python如何利用cv2.rectangle()绘制矩形框
Dec 24 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父类调用子类方法的代码例子
2014/04/09 PHP
php的ddos攻击解决方法
2015/01/08 PHP
检测codeigniter脚本消耗内存情况的方法
2015/03/21 PHP
thinkPHP中配置的读取与C方法详解
2016/12/05 PHP
thinkphp5 URL和路由的功能详解与实例
2017/12/26 PHP
document.getElementById为空或不是对象的解决方法
2010/01/24 Javascript
JS 文件传参及处理技巧分析
2010/05/13 Javascript
基于jQuery的仿flash的广告轮播代码
2010/11/04 Javascript
JS实现控制表格单元格垂直对齐的方法
2015/03/30 Javascript
JavaScript判断前缀、后缀是否是空格的方法
2015/04/15 Javascript
简单纯js实现点击切换TAB标签实例
2015/08/23 Javascript
jQuery mobile 移动web(6)
2015/12/20 Javascript
js字符串引用的两种方式(必看)
2016/09/18 Javascript
基于javascript实现按圆形排列DIV元素(二)
2016/12/02 Javascript
详解nodejs中exports和module.exports的区别
2017/02/17 NodeJs
jQuery animate()实现背景色渐变效果的处理方法【使用jQuery.color.js插件】
2017/03/15 Javascript
jQuery插件FusionCharts绘制ScrollColumn2D图效果示例【附demo源码下载】
2017/03/22 jQuery
JavaScript实现父子dom同时绑定两个点击事件,一个用捕获,一个用冒泡时执行顺序的方法
2017/03/30 Javascript
JS简单获取日期相差天数的方法
2017/04/24 Javascript
通过函数作用域和块级作用域看javascript的作用域链
2018/08/05 Javascript
详解webpack+ES6+Sass搭建多页面应用
2018/11/05 Javascript
原生js实现点击按钮复制内容到剪切板
2020/11/19 Javascript
Python笔记(叁)继续学习
2012/10/24 Python
用python + openpyxl处理excel2007文档思路以及心得
2014/07/14 Python
详解在Python程序中解析并修改XML内容的方法
2015/11/16 Python
理解Python中的绝对路径和相对路径
2017/08/30 Python
python3 深浅copy对比详解
2019/08/12 Python
python中time.ctime()实例用法
2021/02/03 Python
将n个数按输入顺序的逆序排列,用函数实现
2012/11/14 面试题
说一下Linux下有关用户和组管理的命令
2014/08/18 面试题
英文简历中的自我评价
2013/10/06 职场文书
师范学院毕业生求职信范文
2013/12/26 职场文书
自我反省检讨书
2014/01/23 职场文书
十一酒店活动方案
2014/02/20 职场文书
元旦联欢会主持词
2014/03/26 职场文书
保护环境倡议书
2014/04/14 职场文书