zoukankan      html  css  js  c++  java
  • 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
        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")
    

    2、修改判断文件是否为空的方法,采用os.path.getsize的方法来判断文件是否为空

    with open("install_hadoop.txt", "r", encoding="utf-8") as f:
        flag = bool(f.readline())
        # obj = True
        f.seek(0)
        print(os.path.getsize("install_hadoop.txt"))
        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")

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

  • 相关阅读:
    for, 类型转换和使用方法
    笔记,随时更改
    控制流程之while循环, for循环
    赋值,逻辑,运算符, 控制流程之if 判断
    常量,基本数据类型,输入输出,基本运算符
    介绍python由来, 安装python3.8.3 及其变量的定义, 小整数池
    数组去重多个条件
    vue 自定义指令
    截取指定名字的url参数
    常用的js
  • 原文地址:https://www.cnblogs.com/bainianminguo/p/9579085.html
Copyright © 2011-2022 走看看