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

 更新时间:2019年07月26日 14:22:44   作者:bainianminguo  
这篇文章主要介绍了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
  <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中字典取最大值的应用方式

    这篇文章主要介绍了python中字典取最大值的应用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • Pandas如何通过np.array函数或tolist方法去掉数据中的index

    Pandas如何通过np.array函数或tolist方法去掉数据中的index

    这篇文章主要介绍了Pandas如何通过np.array函数或tolist方法去掉数据中的index问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • Ruby使用eventmachine为HTTP服务器添加文件下载功能

    Ruby使用eventmachine为HTTP服务器添加文件下载功能

    这篇文章主要介绍了Ruby使用eventmachine为HTTP服务器添加文件下载功能的实例,同时作者也分享了Windows上eventmachine安装报错问题的解决方法,需要的朋友可以参考下
    2016-04-04
  • 通过源码分析Python中的切片赋值

    通过源码分析Python中的切片赋值

    因为经常取指定索引范围的操作,用循环十分繁琐,因此,Python提供了切片(Slice)操作符,能大大简化这种操作。而下面这篇文章则通过源码给大家分析介绍了Python中切片赋值的相关资料,需要的朋友可以参考学习,下面来一起看看吧。
    2017-05-05
  • Python实现一个带权无回置随机抽选函数的方法

    Python实现一个带权无回置随机抽选函数的方法

    这篇文章主要介绍了Python实现一个带权无回置随机抽选函数的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • python中ImageTk.PhotoImage()不显示图片却不报错问题解决

    python中ImageTk.PhotoImage()不显示图片却不报错问题解决

    这篇文章主要给大家介绍了关于在python中ImageTk.PhotoImage()不显示图片却不报错问题的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • 对Python 简单串口收发GUI界面的实例详解

    对Python 简单串口收发GUI界面的实例详解

    今天小编就为大家分享一篇对Python 简单串口收发GUI界面的实例详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • python读取与处理netcdf数据方式

    python读取与处理netcdf数据方式

    今天小编就为大家分享一篇python读取与处理netcdf数据方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • 详解Appium+Python之生成html测试报告

    详解Appium+Python之生成html测试报告

    这篇文章主要介绍了详解Appium+Python之生成html测试报告,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • 通过Python的filestools库给图片添加全图水印的示例详解

    通过Python的filestools库给图片添加全图水印的示例详解

    这篇文章主要介绍了通过Python的filestools库给图片添加全图水印,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04

最新评论