2018年12月22日 前盖前保间隙 函数复习
windows 中回车是 \r\n
unix/linux中是\n
f=open('test3','rb') #以字节滴方式操作,rb,wb,xb,ab或者r+b,w+b,w+b,a+b;后面不用加encoding= data=f.read() print(data.decode('utf-8'))#用decode解码,把字节解码回字符串 f.close() f=open('test2','wb') data=f.write('多大多大'.encode('utf-8')) #用encode()编码,然后再输入到test2
f=open('test2','r+',encoding='utf-8',newline="")#newline用于区分换行符 print('1.closed检是否关闭:',f.closed) print('2.encoding显示文件是何编码',f.encoding) print('3.flush刷新,将内存上数据保存再内存上,就是自动保存::',f.flush()) f.readline() print('4.tell查询光标位置',f.tell())#read(3)代表读取3个字符,其余文件内 光标移动都是以字节为单位如seek,tell,read,trucate,tell()查询 print('5.seek光标的移动,从头开始计算',f.seek(3)) # print('6.readlines打印光标以后剩余内容',f.readlines()) print('7.read(n)读取光标后的字符,括号内代表读取数量',f.read(5)) print('8.truncate()文件截断,从文件开头开始:',f.truncate(5))#文件中只截取5个字节
f=open('test4','rb') print(f.tell()) print(f.seek(5,0)) #0默认为文件开头 print(f.seek(3,1))# 1代表相对于上一次光标的位置 用seek高端用法,上面必须写rb模式,而且没有encoding= print(f.seek(-3,2))#2代表倒序,所以用-3 print(f.readlines())
#取最后一行 g=open('test3','rb') data=g.readlines()#将文档变成list形式 print(data[-1].decode('utf-8')) # data[-1]代表取list最后一个值 #seek取最后一行 h=open('test3','rb') for i in h:#此处取值也是一次一行,省内存如果用g.readlines()特别占用内存 offs=-10 while True: h.seek(offs,2) data=h.readlines() if len(data) > 1: #判断是否读完最后一行 print('读取最后一行:%s'% (data[-1].decode('utf-8'))) break offs*=2 #如果没有读完最后一行,则把offs增加
迭代器和生成器和for循环工作原理
迭代器协议:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么导致stoplteration异常,终止迭代
可迭代对象:实现来迭代器协议的对象(对象内部定义一个__iter__方法)
print("_"*50) l=[1,2,3,4] x=l.__iter__() #先把l变成可迭代对象 print(x)#打印出转化后的字符串的可迭代对象 print(x.__next__()) print(x.__next__())#next方法 print(x.__next__()) print(x.__next__()) print('*'*44) for i in l : print(i) # 先执行xx=l.__iter__()方法 # 后执行到StopIteration 就停止for循环 print('&'*55) index=0 while index<len(l):#不用迭代器只用索引的方法遍历List print(l[index]) index+=1 print('^'*44) dic={"a":1,"b":2,"c":3} iter_d=dic.__iter__() print(iter_d.__next__())# next 得到的就是key值 f=open('test3','r+') iter_f=f.__iter__() print(iter_f.__next__(),end='') print(iter_f.__next__(),end='') print(iter_f.__next__(),end='') print(iter_f.__next__(),end='') print("$"*44) for i in f: print(i,end='')
f=[5,2,3,4,6] data=f.__iter__() print(next(data))#next 内置函数 print(next(data)) print(next(data))
next 就是在调用迭代器的__next__
next是python内置,__next__是数据类型内置的函数。