zoukankan      html  css  js  c++  java
  • StringIO和BytesIO的用法

    数据读写有两种方式:

    1、直接读写。案例

    import openpyxl
    
    def write_excel():
        f = openpyxl.Workbook()  # 创建工作簿
        # sheet1 = f.create_sheet()
        print("sheet names:", f.sheetnames)
        sheet1 = f.active   # 当前工作表的名称
        print("sheet1:", sheet1)
        row_file = 5 # 生成5行
        col_three = 3 # 生成3列
    
        for row in range(row_file):
            for col in range(col_three):
                rw = row + 1
                cl = col + 1
                if col % 2 == 0:
                    sheet1.cell(row=rw, column=cl, value='1')
                else:
                    sheet1.cell(row=rw, column=cl, value='2')
    
        f.save("OPENPYXL.xlsx")  # 保存文件
    
    if __name__ == '__main__':
        # 写入Excel
        write_excel()
    print('openpyxl 写入成功')

    2、在内存中读写。[StringIO读写是字符串,  BytesIO读写是二进制文件]

    import StringIO
    
    output = StringIO.StringIO()
    output.write('First line.
    ')
    print >>output, 'Second line.'
    
    # Retrieve file contents -- this will be
    # 'First line.
    Second line.
    '
    contents = output.getvalue() #获取写入的数据
    
    # Close object and discard memory buffer --
    # .getvalue() will now raise an exception.
    output.close()  #最后关闭
    from io import StringIO
    ff = StringIO('Hello!
    Hi!
    Goodbye!')
    f = StringIO()  #创建StringIO对象--可以看做在内存中的文件
    i=f.write('hello我是中国人
    ') #写入字符串,自动移动读写指针
    #返回值:返回字符串个数
    i=f.write('李明
    ')
    f.write('中国
    ')
    str=f.getvalue() #读取字符串(全部)
    #不操作指针
     
    ss=f.seek(0) #移动读写指针
    """参数2:
    为0时代表从文件开头开始算起
    1代表从当前位置开始算起
    2代表从文件末尾算起 ??
    如果操作成功,则返回新的指针位置,如果操作失败,则函数返回 -1
    """
    s=f.tell() #返回当前读写位置
    # s = f.readline() #从当前位置开始读取一行,包括
    ;自动移动读写指针
    #s = f.readline(3) #从当前位置开始读取一行,包括
    ;自动移动读写指针
    # 参数 读取的最大字符数
     
    #s=f.readlines()  #读取所有行,返回一个字符串列表;;自动移动读写指针
    #['hello我是中国人
    ', '李明
    ', '中国
    ']
     
    #s = f.readlines(2) #读取指定行,返回一个字符串列表;自动移动读写指针
     
    #f.flush() #刷新
    #s=f.read() # 读取全部内容;自动移动读写指针
    #s=f.read(5)  #从当前位置开始读取的最大字符数
    #f.truncate(3) #保留最前面的n个字符数,其它都删除
     
    f.close() #关闭
    from io import BytesIO
     
    # 方式一
    f = BytesIO()  #创建BytesIO对象
    i=f.write('中文
    '.encode('utf-8')) #写入字符串--字节形式
    #返回值:写入的字节数;注意不是字符数
     
    f.write('中国'.encode('utf-8'))
     
    x=f.getvalue() #获取字符串(全部)--字节形式
    # b'xe4xb8xadxe6x96x87'
     
     
    # 方式二:可以用一个bytes初始化BytesIO,然后,像读文件一样读取
    ff = BytesIO(b'xe4xb8xadxe6x96x87')
    y=ff.read() #读取字节
     
    print(y)

    优点:StringIO和BytesIO是在内存中操作str和bytes的方法,使得和读写文件具有一致的接口。

  • 相关阅读:
    腾讯2016春招安全岗笔试题解析
    AlgorithmVisualizer
    agentzh --春哥--调试专家
    大话Java性能优化 BOOK
    《Linux内核分析》-----张超
    ROS中Mangle解析
    shell中trap捕获信号
    虚拟化技术性能总结:Zones, KVM, Xen
    Dtrace on Mac OS X
    linux内核学习-建议路线
  • 原文地址:https://www.cnblogs.com/1314520xh/p/13227751.html
Copyright © 2011-2022 走看看