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()
原文地址:https://www.cnblogs.com/shuzhixia/p/9796782.html