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程序设计入门(4)模块和包
Jun 16 Python
Python基础教程之正则表达式基本语法以及re模块
Mar 25 Python
浅谈Python 集合(set)类型的操作——并交差
Jun 30 Python
python创建文件备份的脚本
Sep 11 Python
python 接收处理外带的参数方法
Dec 03 Python
python tkinter实现界面切换的示例代码
Jun 14 Python
python re.sub()替换正则的匹配内容方法
Jul 22 Python
python DataFrame转dict字典过程详解
Dec 26 Python
PyTorch加载预训练模型实例(pretrained)
Jan 17 Python
python语言中有算法吗
Jun 16 Python
Python虚拟环境库virtualenvwrapper安装及使用
Jun 17 Python
python实现暗通道去雾算法的示例
Sep 27 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
【动漫杂谈】关于《请在T台上微笑》
2020/03/03 日漫
php发送邮件的问题详解
2015/06/22 PHP
Yii2实现让关联字段支持搜索功能的方法
2016/08/10 PHP
yii2使用GridView实现数据全选及批量删除按钮示例
2017/03/01 PHP
PHP preg_match实现正则表达式匹配功能【输出是否匹配及匹配值】
2017/07/19 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
2020/04/04 PHP
input、button的不同type值在ajax提交表单时导致的陷阱
2009/02/24 Javascript
validator验证控件使用代码
2010/11/23 Javascript
TimergliderJS 一个基于jQuery的时间轴插件
2011/12/07 Javascript
js屏蔽鼠标键盘(右键/Ctrl+N/Shift+F10/F11/F5刷新/退格键)
2013/01/24 Javascript
获取当前点击按钮的id用this.id实现
2014/03/17 Javascript
JS+CSS实现经典的左侧竖向滑动菜单效果
2015/09/23 Javascript
Bootstrap基本组件学习笔记之缩略图(13)
2016/12/08 Javascript
Jquery Easyui搜索框组件SearchBox使用详解(19)
2016/12/17 Javascript
Bootstrap的Carousel配合dropload.js实现移动端滑动切换图片
2017/03/10 Javascript
JavaScript字符串检索字符的方法
2017/06/23 Javascript
解决vue中post方式提交数据后台无法接收的问题
2018/08/11 Javascript
对于防止按钮重复点击的尝试详解
2019/04/22 Javascript
layui 实现自动选择radio单选框(checked)的方法
2019/09/03 Javascript
layui实现checkbox的目录树tree的例子
2019/09/12 Javascript
Python中字典的浅拷贝与深拷贝用法实例分析
2018/01/02 Python
pyqt5的QWebEngineView 使用模板的方法
2018/08/18 Python
python实现简单的单变量线性回归方法
2018/11/08 Python
解决Pycharm调用Turtle时 窗口一闪而过的问题
2019/02/16 Python
Python内置random模块生成随机数的方法
2019/05/31 Python
python3 写一个WAV音频文件播放器的代码
2019/09/27 Python
python如何实现不可变字典inmutabledict
2020/01/08 Python
Python itertools.product方法代码实例
2020/03/27 Python
基于python实现破解滑动验证码过程解析
2020/05/28 Python
Html5 APP中监听返回事件处理的方法示例
2018/03/15 HTML / CSS
什么是"引用"?申明和使用"引用"要注意哪些问题?
2016/03/03 面试题
天网面试题
2013/04/07 面试题
医生辞职信范文
2015/03/02 职场文书
使用Oracle命令进行数据库备份与还原
2021/12/06 Oracle
python神经网络学习 使用Keras进行回归运算
2022/05/04 Python
Redis基本数据类型哈希Hash常用操作命令
2022/06/01 Redis