zoukankan      html  css  js  c++  java
  • Python小练习:StringIO和BytesIO读写操作的小思考

    from io import StringIO;
    
    f = StringIO();
    f.write('Hello World');
    s = f.readline();
    print s;
    

    上面这种方法“无论如何”都读不出f的内容,使用readlines和循环也不行。

    但是,用以下的方法,却可以“正常读取”:

    from io import StringIO;
    
    f = StringIO('Hello World');
    s = f.readline();
    print s;
    

    这是为什么呢?

    PS:遇到问题没人解答?需要Python学习资料?可以加点击下方链接自行获取
    note.youdao.com/noteshare?id=2dce86d0c2588ae7c0a88bee34324d76

    这是因为the stream position的原因,当你用:

    d = StringIO('Hello World')
    

    其stream position为0(可以通过d.tell()获得),而后执行:

    d.readline()
    

    stream position移动到11.因此当我们再次执行d.readline()时,返回的是空字符串。演示见图:
    image
    类似的,使用:

    f = StringIO()
    

    stream position也为0,但执行了:

    f.write('Hello World')
    

    之后,stream position就移动到11了,因此此时你再执行readline时返回的依旧是空字符串。

    当然咯,既然这个读取是和stream position的位置有关系,那么要能够在当前情况下还能读取'Hello World!',我们可以调整这个指针的位置,执行:

    f.seek(0)
    

    再进行读取操作,即可。

    下面利用BytesIO进行演示,是一样的道理:
    在这里插入图片描述

  • 相关阅读:
    记一次坑爹的jconsole使用
    触发Full GC的时机
    java NIO之Selector
    java NIO之SelectedKey
    java泛型中的各种限制
    filebeat安装部署
    Kibana安装及简单使用
    elastucasearch基础理论以及安装
    Salt 与Salt API配置
    RabbitMQ 相关理论部分
  • 原文地址:https://www.cnblogs.com/python960410445/p/11985283.html
Copyright © 2011-2022 走看看