zoukankan      html  css  js  c++  java
  • python同步IO编程——StringIO、BytesIO和stream position

    主要介绍python两个内存读写IO:StringIO和BytesIO,使得读写文件具有一致的接口

    StringIO

    内存中读写str。需要导入StringIO

    >>> from io import StringIO
    >>> f = StringIO()
    >>> f.write('I O U')
    5
    >>> f.getvalue()
    'I O U'

    也可以用一个str初始化StringIO,然后像读文件一样读取:

    >>> from io import StringIO
    >>> f = StringIO('wc
    love
    LY')
    >>> while 1:
    ...     s = f.readline()
    ...     if s =='':
    ...             break
    ...     print(s.strip())
    ...
    wc
    love
    LY

    BytesIO

    内存中操作二进制数据:

    >>> from io import BytesIO
    >>> f = BytesIO()
    >>> f.write('武松'.encode('utf-8'))
    6
    >>> f.read()
    b''
    >>> f.getvalue()
    b'wcxe6xadxa6xe6x9dxbe'

    细心的童鞋会发现,f.read()竟然为空?!

    这是因为stream position的原因。可以理解为IO的指针位置,可以使用tell()方法获得该值:

    >>> d = StringIO('hehe')
    >>> d.tell()
    0
    >>> d.read()
    'hehe'
    >>> d.tell()
    4
    >>> d.read()
    ''
    >>> d.getvalue()
    'hehe'

    当拟调用诸如read()、readline()、getvalue()方法时,stream position的值是在变化的!当你读取完所有的内容后,指针的位置已经在最后了,此时你再调用read()方法时就为空了。但是可以使用d.getvalue()方法查看内容。

    这时如何调用read()使得结果如我所愿呢,可以结合seek()方法,该方法会重置指针的位置:

    >>> d.seek(3)
    3
    >>> d.read()
    'e'
    >>> d.seek(1)
    1
    >>> d.read()
    'ehe'
  • 相关阅读:
    手游部分测试点
    Selenium-xapth定位
    添加git 忽略文件
    cxfreeze打包python程序的方法说明(生成安装包,实现桌面快捷方式、删除快捷方式)
    使用minidom来处理XML的示例
    ElementTree之Xml文档处理
    cx_freeze打包EXE文件
    wxpython的简单的应用
    python获取文件路径, 文件名, 后缀名
    flask-sqlalchemy
  • 原文地址:https://www.cnblogs.com/hiwuchong/p/8613052.html
Copyright © 2011-2022 走看看