• python之路(5)文件操作(open)


      目录

    • 前言
    • 文件的打开模式
    • 文件句柄的方法
    • seek()方法介绍

      前言

    1. 打开文件,得到文件句柄并赋值给一个变量
    2. 通过句柄对文件进行操作
    3. 关闭文件

    f = open('demo.txt','r',encoding='utf-8')#获得文件句柄,指定编码格式,以可读的形式打开
    data = f.read()
    print(data)
    f.close()#关闭文件

    注:open()默认根据系统编码,默认以‘可读’(r)的形式打开文件

     文件的打开模式

    • 文件模式
      • r,只读模式(文件必须存在,不然报错)
      • w,只写模式(以这种模式打开,会清空文件的内容,文件不存在,则创建文件)
      • x,只读模式(不存在创建,存在报错)
      • a,追加模式
    • “+”表示同时读写操作
      • r+,读写
      • w+,写读
      • x+,写读
      • a+,写读
    • “b”表示以字节的方式操作(不能指定编码格式)
      • rb
      • wb
      • xb
      • ab

     文件句柄的方法

      readable():判断文件是否可读

      writeable():判断文件是否可写

      close():关闭文件句柄

      tell():返回光标位置

      flush():将内容存到硬盘中

      read()

    data = f.read()#返回得到文件内容

      readline()

    data = f.readline()#返回文件的一行内容

      readlines()

    data = f.readlines()#返回一个列表,每个元素为文件的每一行

      write()

    f.write('hello')#写入内容

      writelines()

    f.writelines(['chen
    ','hua
    ','li
    '])#写入一列内容

      truncate()

    注:文件必须要有写的操作
    f.truncate(10)#截取文件前10个字节

      "b"模式下的写操作

    f = open('demo.txt','wb')
    
    #必须将将内容转换成二进制的形式存入文件中
    f.write(bytes('chen',encoding='utf-8'))
    f.write('chen'.encode('utf-8'))

     seek()方法介绍

      注:只有read()的光标是以字符为单位,其他seek,tell,truncate都是以字节为单位移动;window下的换行符是( )

     seek的三种模式(除了默认模式,文件要以‘b’的模式打开) 

    • 0,以文件开头作为起始位置(默认模式)
    • 1,以上一次光标停留的位置作为起始位置
    • 2,以结尾作为起始位置(位置参数要以负数的形式)

      

      使用seek()方法读取日志文件最近一天的内容

    2016/2/3     xxx做了什么事
    2016/2/4     xxx做了什么事
    2016/2/5     xxx做了什么事
    2016/2/6     xxx做了什么事
    2016/2/7     xxx做了什么事
    2016/2/8     xxx做了什么事
    2016/2/9     xxx做了什么事
    2016/2/10     xxx做了什么事
    2016/2/11     xxx做了什么事
    2016/2/12     xxx做了什么事
    2016/2/13     xxx做了什么事
    2016/2/14     xxx做了什么事
    2016/2/15     chen做了厉害的事
    日志文件

      方案一

    f = open('日志文件','rb')
    data = f.readlines()
    print(data[-1].decode('utf-8'))
    f.close()

    缺点:readlines()会将文件组成一个大列表,占用大量内存

      方案二

    f = open('日志文件','rb')
    
    offs = -5
    while True:
        f.seek(offs, 2)
        data = f.readlines()
        if len(data) > 1:
            print('文件的最后一行是%s' % (data[-1].decode('utf-8')))
            break
        offs *=2
    f.close()
    
  • 相关阅读:
    [Trie][并查集]JZOJ 5822 量子纠缠
    [模拟]JZOJ 5820 非法输入
    SAM模板
    [树形DP]JZOJ 5819 大逃杀
    [MST][dij]JZOJ 5818 做运动
    [暴力]JZOJ 5817 抄代码
    [概率期望][树形DP][LCA]JZOJ 5814 树
    认证组件
    注册接口
    视图家族 & 路由组件
  • 原文地址:https://www.cnblogs.com/shuzhixia/p/9796782.html
Copyright © 2020-2023  润新知