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进行演示,是一样的道理:
    在这里插入图片描述

  • 相关阅读:
    HDU1814 Peaceful Commission
    POJ1679 The Unique MST
    POJ 3243 Clever Y
    POJ 3463 Sightseeing
    POJ1274 The Perfect Stall
    POJ 2417 Discrete Logging
    POJ1011 Sticks
    前端面试资源整理(一)
    小程序和腾讯地图联合使用
    快速创建 HTML5 Canvas 电信网络拓扑图
  • 原文地址:https://www.cnblogs.com/python960410445/p/11985283.html
Copyright © 2011-2022 走看看