zoukankan      html  css  js  c++  java
  • 2018年12月22日 前盖前保间隙 函数复习

    windows 中回车是

    unix/linux中是

    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__是数据类型内置的函数。

  • 相关阅读:
    一款你不容错过的Laravel后台管理扩展包 —— Voyager
    关于后台动态模板添加内容的总结 Builder使用
    Python 解决 :NameError: name 'reload' is not defined 问题
    thinkcmf,thinksns,thinkphp,onethink三者是什么关系?
    PHP中用下划线开头的变量含义
    NetBeans 时事通讯(刊号 # 77 Oct 21, 2009)
    NetBeans 时事通讯(刊号 # 78 Oct 27, 2009)
    最受欢迎的中国 50 技术博客评选结果
    祝父亲生日快乐
    最受欢迎的中国 50 技术博客评选结果
  • 原文地址:https://www.cnblogs.com/python1988/p/10162190.html
Copyright © 2011-2022 走看看