python开发学习 day18-python函数(文件处理b模式,迭代器,生成器。。。)
复习
#map # l=[1,2,3,4,5] # # print(list(map(str,l))) #reduce # from functools import reduce # l=[1,2,3,4,5] # # reduce(func,l) # res=reduce(lambda x,y:x+y,l,3) # print(res) #filter # name=['alex_sb','linhaifeng'] # res=filter(lambda x:not x.endswith('sb'),name) # print(res) # print(list(res)) #文件操作 # f=open('test11.py','w',encoding='utf-8') # f.write('1111\n') # f.write('1111\n') # f.write('1111\n') # f.close() # f=open('test11.py','a',encoding='utf-8') # f.write('这是a模式的内容') # f.close() # f=open('test11.py','r+',encoding='utf-8') # f.write('hello')
一、文件处理b模式
# 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\n',encoding='utf-8')) # f.write('杨件'.encode('utf-8')) f=open('test22.py','ab') #b的方式不能指定编码 # f.write('杨件'.encode('utf-8')) # open('a;ltxt','wt')
二、文件操作的其他方法(tell,seek,read,truncate,flush)
# f=open('a.txt','r+',encoding='gb2312') # # data=f.read() # # print(data) # f.write('你好') # f=open('b.txt','r+',encoding='latin-1') # data=f.read() # print(data) # f.write('aaaaaaaaaaa') # f=open('b.txt','r',encoding='utf-8',newline='') #读取文件中真正的换行符号 # f=open('b.txt','r+',encoding='utf-8',newline='') #读取文件中真正的换行符号 # print(f.closed) # print(f.encoding) # f.flush() # print(f.readlines()) # print(f.tell()) # f.readline() # print(f.tell()) # f.seek(1) # print(f.tell()) # print(f.readlines()) # f.seek(3) # print(f.tell()) # print(f.read()) # data=f.read(1) # print(data) # f.truncate(10) # f.flush() #讲文件内容从内存刷到硬盘 # # f.closed #文件如果关闭则返回True # # f.encoding #查看使用open打开文件的编码 # f.tell() #查看文件处理当前的光标位置 # # f.seek(3) #从开头开始算,将光标移动到第三个字节 # f.truncate(10) #从开头开始算,将文件只保留从0-10个字节的内容,文件必须以写方式打开,但是w和w+除外 # # f=open('d.txt','r',newline='') # # data=f.readline().encode('utf-8') # print(data) # print(f.tell()) # 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()) # 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) 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
三、读取大文件最后一行(seek, 偏移量offset)
f=open('d.txt','rb') for i in f: offs=-3 n=0 while True: f.seek(offs,2) data=f.readlines() if len(data) > 1: print('最后一行',data[-1]) break offs*=2
四、迭代器和生成器
# x='hello' # # print(dir(x)) # iter_test=x.__iter__() # # print(iter_test) # print(iter_test.__next__()) # print(iter_test.__next__()) # print(iter_test.__next__()) # print(iter_test.__next__()) # print(iter_test.__next__()) # print(iter_test.__next__()) # l=[1,2,3] # for i in l: #i_l=l.__iter_() i_l.__next__() # print(i) # index=0 # while index < len(l): # print(l[index]) # index+=1 # iter_l=l.__iter__() #遵循迭代器协议,生成可迭代对象 # print(iter_l.__next__()) # print(iter_l.__next__()) # # for i in l: # print(i) s={1,2,3} # for i in s: # print(i) # iter_s=s.__iter__() # print(iter_s) # print(iter_s.__next__()) # print(iter_s.__next__()) # print(iter_s.__next__()) # print(iter_s.__next__()) # dic={'a':1,'b':2} # iter_d=dic.__iter__() # print(iter_d.__next__()) # f=open('test.txt','r+') # # for i in f: # iter_f=f.__iter__() # print(iter_f) # print(iter_f.__next__(),end='') # print(iter_f.__next__(),end='') # l=[1,2,3,4,5] # diedai_l=l.__iter__() # while True: # try: # print(diedai_l.__next__()) # except StopIteration: # # print('迭代完毕了,循环终止了') # break l=['die','erzi','sunzi','chongsunzi'] iter_l=l.__iter__() print(iter_l) # print(iter_l.__next__()) # print(iter_l.__next__()) # print(iter_l.__next__()) # print(iter_l.__next__()) # print(iter_l.__next__()) # print(next(iter_l)) #next()---->iter_l.__next__() def test(): yield 1 yield 2 yield 3 g=test() print('来自函数',g) # print(g.__next__()) # print(g.__next__()) #三元表达式 # name='alex' # name='linhaifeng' # res='SB' if name == 'alex' else '帅哥' # print(res) #列表解析 # egg_list=[] # for i in range(10): # egg_list.append('鸡蛋%s' %i) # print(egg_list) l=['鸡蛋%s' %i for i in range(10)] # l1=['鸡蛋%s' %i for i in range(10) if i > 5 ] # # l1=['鸡蛋%s' %i for i in range(10) if i > 5 else i] #没有四元表达式 # l2=['鸡蛋%s' %i for i in range(10) if i < 5] #没有四元表达式 print(l) # print(l1) # print(l2) laomuji=('鸡蛋%s' %i for i in range(10)) #生成器表达式 print(laomuji) print(laomuji.__next__()) print(laomuji.__next__()) print(next(laomuji)) print(next(laomuji)) print(next(laomuji)) print(next(laomuji)) print(next(laomuji)) print(next(laomuji)) print(next(laomuji)) print(next(laomuji)) # print(next(laomuji)) l=[1,2,3,34] # map(func,l) # print(sum(l)) # print(sum()) # print(sum(i for i in range(10000000000000)))

浙公网安备 33010602011771号