1.函数复习
# map # l = [1,2,3,4,5] # print(list(map(str,l))) # reduce # l = [1,2,3,4,5] # from functools import reduce # print(reduce(lambda x,y:x+y,l,3)) #初始值是3. # filter # name=['ray_sb','ray'] # res=filter(lambda x:x.endswith('sb'),name) # # res=filter(lambda x:not x.endswith('sb'),name) #不包含 # print(res) # print(list(res))
2.文件处理b模式(二进制处理)
1.文件默认处理是文本方式,但是视频,图片之类的只能用二进制处理
2.文件最终处理方式是二进制,所以二进制可以跨平台
3.b模式对linux没什么用,因为linux就是二进制处理,对windows有用
# f=open('test11.py','rb',encoding='utf-8') #b的方式不能指定编码 # f=open('test11.py','rb') #b的方式不能指定编码 # data=f.read() # 编码:'字符串'---------encode---------》bytes # 解码:bytes---------decode---------》'字符串' # print(data) # print(data.decode('utf-8')) # f.close() # f=open('test22.py','wb') #b的方式不能指定编码 # f.write(bytes('1111 ',encoding='utf-8')) # f.write('星空月零'.encode('utf-8')) # f=open('test22.py','ab') #b的方式不能指定编码 # f.write('星空月零'.encode('utf-8')) # open('a;ltxt','wt') # 1.文件默认处理是文本方式,但是视频,图片之类的只能用二进制处理 # 2.文件最终处理方式是二进制,所以二进制可以跨平台 # 3.b模式对linux没什么用,因为linux就是二进制处理,对windows有用
3.文件操作其他方法
# f.flush() #讲文件内容从内存刷到硬盘 # # f.closed #文件如果关闭则返回True # # f.encoding #查看使用open打开文件的编码 # f.tell() #查看文件处理当前的光标位置 # # f.seek(3) #从开头开始算,将光标移动到第三个字节 # f.truncate(10) #从开头开始算,将文件只保留从0-10个字节的内容,文件必须以写方式打开,但是w和w+除外
用seek方法的相对模式时必须以b的方式打开
# f=open('seek.txt','r',encoding='utf-8') # print(f.tell()) # f.seek(10) # print(f.tell()) # f.seek(3) # print(f.tell()) # f=open('seek.txt','rb') # print(f.tell()) # f.seek(10,1) # print(f.tell()) # f.seek(3,1) # print(f.tell()) # f=open('seek.txt','rb') # print(f.tell()) # f.seek(-5,2) # print(f.read()) # print(f.tell()) # f.seek(3,1) # print(f.tell())
文件读取
因为readlines()是把文件从头读到尾,耗费资源,所以用循环的方式好。
# f=open('日志文件','rb') # data=f.readlines() # print(data[-1].decode('utf-8')) f=open('日志文件','rb') # for i in f.readlines(): # print(i) #循环文件的推荐方式 # for i in f: # print(i)
文件读取demo:读取日志文件的最后一行
for i in f: offs=-10 while True: f.seek(offs,2) data=f.readlines() if len(data) > 1: print('文件的最后一行是%s' %(data[-1].decode('utf-8'))) break offs*=2