码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-10-16 13:48:38      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:二进制   图片   isp   mic   指定   flush   目录   不能   前言   

  目录 

  • 前言
  • 文件的打开模式
  • 文件句柄的方法
  • 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\n‘,‘hua\n‘,‘li\n‘])#写入一列内容

  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下的换行符是(\r\n)

 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()

 

 

 

 

 

 

 

 

 



 

  

 

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

标签:二进制   图片   isp   mic   指定   flush   目录   不能   前言   

原文地址:https://www.cnblogs.com/shuzhixia/p/9796782.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!