Python基础(文件操作)
文件读取:
1 #文件读取方式一 2 f=open("a.txt","r+",encoding="utf8") 3 data=f.read() 4 print(data) 5 f.close() 6 7 #文件读取方式二 8 with open("a.txt","r+",encoding="utf8") as f: 9 data=f.read() 10 print(data)
文件写入:
1 #文件写入方式一 2 f=open("b.txt","w",encoding="utf8") 3 f.write("今天天气很好!") 4 f.close() 5 6 #文件写入方式二 7 with open("a.txt","r+",encoding="utf8") as f: 8 data=f.write() 9 print(data)
标注**:使用with open() as f 方式读写数据时简化了f.close()的步骤
文件刷新(flush):
1 with open("c.txt","r+",encoding="utf8") as f: 2 f.write("今夜难以入睡!") 3 f.flush()#将写在内存中的内容刷新到硬盘中
文件tell方法:
描述:此方法返回该文件中读出的文件/写指针的当前位置。
1 with open("d.txt","r+",encoding="utf8") as f: 2 data=f.readline() 3 print(data) 4 print(f.tell()) #显示当前光标所在的位置
文件seek方法:
描述:seek()用于移动文件读取指针到指定位置。
格式:file.seek(offset,whence)
offset:开始的偏移量,也就是代表需要移动偏移的字节数
whence:给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。whence值为空没设置时会默 认为0。
1 >>> f=open("aaa.txt","w") #以只写的形式打开一个叫做aaa.txt的文件 2 >>> f.write("my name is liuxiang,i am come frome china") #写入内容 3 >>> f.close() #关闭文件 4 >>> f=open("aaa.txt","r") #以只读打开文件 5 >>> f.read() #读取内容 6 'my name is liuxiang,i am come frome china' 7 >>> f.seek(3,0) #“0”代表从文件开头开始偏移,偏移3个单位 8 >>> f.read(5) #从偏移之后的指针所指的位置(即“n”)开始读取5个字符 9 'name ' 10 >>> f.tell() #显示现在指针指在哪个位置(即“i”的位置) 11 >>> f.readline() #读取这一行剩下的内容 12 'is liuxiang,i am come frome china' 13 14 15 16 >>> f.seek(0,2) #“2”代表从末尾算起,“0”代表偏移0个单位 17 >>> f.read() 18 '' #因为是从末尾算起,内容已结束。所以读取内容为空
**seek方法读取日志文件最后一行:
1 #日志文件 2 2018/12/23 kelvin login 登录淘宝 3 2018/12/25 Alex buy 购买商品 4 2018/12/28 kelvin buy 购买商品 5 2018/12/29 elvin login 登录网站 6 2018/12/29 kelvin nologin 退出登录 7 2018/12/31 bob foot 逛商城 8 2019/01/01 kelvin order 下单
1 with open("日志文件","rb") as f: 2 offset=-20 #定义一个偏移量用于在第一次倒序移动光标长度 3 while True: 4 f.seek(offset,2) #第一次倒序移动光标,移动长度为20个字节 5 data=f.readlines() #读取从移动后的光标到日志结尾的每一行组成一个列表 6 if len(data)>1: #如果取出的文件列表行数大于1,则说明肯定取到了最后一行 7 print(data[-1].decode("utf8")) #取出列表中的最后一行,即为日志的最后一行 8 break 9 offset*=2 #如果取出的文件列表小于等于1,则说明取出的最后一行日志可能不完整,说明偏移量太小,因此扩大偏移量
遍历文件:
1 #Author : Kelvin 2 #Date : 2019/1/4 12:59 3 4 #第一种(不推荐使用,因为会将文件所有内容加载到内存) 5 f=open("日志文件","r+",encoding="utf8") 6 for i in f.readlines(): 7 print(i) 8 9 #第二种(推荐使用,只会一行一行读取,不会首先将所有文件内容加载到内存中) 10 f=open("日志文件","r+",encoding="utf8") 11 for i in f: 12 print(i)