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;

    这是为什么呢?

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

    d = StringIO('Hello World')

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

    d.readline()

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

    类似的,使用:

    f = StringIO()

    stream position也为0,但执行了:

    f.write('Hello World')

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

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

    f.seek(0)

    再进行读取操作,即可。

    下面利用BytesIO进行演示,是一样的道理:

  • 相关阅读:
    优化正则表达式的诀窍
    C#中的正则表达式
    正则表达式-- 零宽断言与懒惰匹配以及平衡组
    Match类
    RegexOptions枚举
    Regex类
    正则表达式-- 元字符
    正则表达式30分钟入门教程
    StreamReader与StreamWriter
    When do we pass arguments by reference or pointer?
  • 原文地址:https://www.cnblogs.com/sbhyc/p/9265050.html
Copyright © 2011-2022 走看看