Python StringIO与BytesIO、类文件对象
StringIO与BytesIO
StringIO与BytesIO、类文件对象的用途,应用场景,优、缺点。
StringIO
StringIO 是io 模块中的类,在内存中开辟的一个文本模式的buffer,可以像文件对象一样操作它。当close 方法被调用的时候,这个buffer 会被释放。
好处:一般来说,磁盘的操作比内存的操作要慢的多,内存足够的时候,一般的优化思路是少落地,减少磁盘IO的过程,可以大大提高程序的运行速度。业务中单机情况可以使用StringIo或者BytesIO,多机就考虑使用 redis。
缺点:内存断电,buffer 中的数据会丢失,所以不建议存储很重要的数据,但可以存储日志之类的丢失也没有大影响的数据。
直接导入:form io import StringIO 使用:StringIO()
导入io 模块:import io 使用时调用StringIO方法:io.StringIO()
readline() 逐行读取
getvalue() 获取全部内容:
In [53]: from io import StringIO In [54]: sio = StringIO() In [55]: print(sio.readable(),sio.writable(),sio.seekable())
True True True In [56]: sio.write("hello\nPython")
Out[56]: 12 In [57]: sio.seek(0)
Out[57]: 0 In [58]: sio.readline()
Out[58]: 'hello\n' In [59]: sio.tell() #读取一行后,文件指针移到了下行行首
Out[59]: 6 In [60]: sio.getvalue() #不受文件指针影响,输出全部内容
Out[60]: 'hello\nPython' In [61]: sio.close()
BytesIO
BytesIO 也是io模块中的类,内存中开辟的一个二进制模式的buffer,也可以像文件对象一样操作它,当close方法调用的时候,这个buffer也会被释放。
简单使用方法与StringIO 一样:
In [44]: from io import BytesIO In [45]: bio = BytesIO() In [46]: print(bio.readable(),bio.writable(),bio.seekable())
True True True In [47]: bio.write(b'hello\nPython')
Out[47]: 12 In [48]: bio.seek(0)
Out[48]: 0 In [49]: bio.readline()
Out[49]: b'hello\n' In [50]: bio.tell()
Out[50]: 6 In [51]: bio.getvalue()
Out[51]: b'hello\nPython' In [52]: bio.close()
file-like对象
类文件对象,可以像文件对象一样操作
socket对象、输入输出对象(stdin、stdout)都是类文件对象
In [1]: from sys import stdout In [2]: print(type(stdout))
<class 'colorama.ansitowin32.StreamWrapper'> #linux下可能是<class '_io.TextIOWrapper'> In [3]: stdout.write('hello\nPython\n') #控制台打印
hello
Python In [4]: stdout.close()
Python StringIO与BytesIO、类文件对象的更多相关文章
- Python Cookbook(第3版)中文版:15.19 从C语言中读取类文件对象
15.19 从C语言中读取类文件对象¶ 问题¶ 你要写C扩展来读取来自任何Python类文件对象中的数据(比如普通文件.StringIO对象等). 解决方案¶ 要读取一个类文件对象的数据,你需要重复调 ...
- 第三章:Python高级编程-深入类和对象
第三章:Python高级编程-深入类和对象 Python3高级核心技术97讲 笔记 3.1 鸭子类型和多态 """ 当看到一直鸟走起来像鸭子.游泳起来像鸭子.叫起来像鸭子 ...
- 『无为则无心』Python面向对象 — 46、类和对象
目录 1.理解类和对象 2.类 3.对象 4.Python中的对象 5.类和对象的定义 (1)定义类 (2)创建对象 (3)练习 6.拓展:isinstance() 函数 1.理解类和对象 (1)类和 ...
- Python面向对象1:类与对象
Python的面向对象- 面向对象编程 - 基础 - 公有私有 - 继承 - 组合,Mixin- 魔法函数 - 魔法函数概述 - 构造类魔法函数 - 运算类魔法函数 # 1. 面向对象概述(Objec ...
- Python基础之初识类和对象
我们在前面学习了解了面向过程编程,接下来我们一起来学习一下面向对象编程.其实不管是面向过程,还是面向对 象,说白了就是一种编程方式而已.既然是面向对象编程,顾名思义,此编程方式的落地需要使用 “类” ...
- Python学习笔记之—— File(文件) 对象常用函数
file 对象使用 open 函数来创建,下表列出了 file 对象常用的函数: 1.file.close() close() 方法用于关闭一个已打开的文件.关闭后的文件不能再进行读写操作, 否则会触 ...
- Python(六)之文件对象
Python文件对象 明确文件系统: 获取文件对象: var_name = open(file_name[mode,[bufsize]]) 缓冲: 0:禁用 1:使用缓冲,只缓冲一行数据 2+:指定缓 ...
- Python——os(二)文件对象
本节介绍 os 模块创建 file 对象的函数 os.fdopen(fd[, mode[, bufsize]]) 用文件描述符打开文件,返回一个连接到 fd 的打开的文件对象,参数 mode 和 bu ...
- 零基础入门学习Python(36)--类和对象:给大家介绍对象
知识点 Python3 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前 ...
随机推荐
- python 爬虫之爬取大街网(思路)
由于需要,本人需要对大街网招聘信息进行分析,故写了个爬虫进行爬取.这里我将记录一下,本人爬取大街网的思路. 附:爬取得数据仅供自己分析所用,并未用作其它用途. 附:本篇适合有一定 爬虫基础 crawl ...
- Java继承--子类的实例化过程
一个对象的实例化过程: Person p = new Person(); 1,JVM会读取指定的路径下的Person.class文件,并加载进内存,并会先加载Person的父类(如果有直接的父类的情况 ...
- git 合并两个仓库
我有两个仓库,一个是gitbook在写一本 一个是放在github的垃圾,这个是我想要开个人网站,但是做的还是不行https://github.com/lindexi/lindexi.github.i ...
- <Mastering KVM Virtualization>:第四章 使用libvirt创建你的第一台虚拟机
在第3章<搭建独立的KVM虚拟化>中,你安装并启动了libvirtd服务.你还引入了帮助你管理虚拟机的libvirt管理工具virt-manager和virsh. 相较于命令行,新用户总是 ...
- 如何在Windows上搭建Android开发环境
Android开发越来越火,许多小伙伴们纷纷学习Android开发,学习Android开发首要任务是搭建Android开发环境,由于大家 主要实在Windows 上开发Android,下面就详细给大家 ...
- 老的工程移植到AndroidStudio需要修改的注意事项
之前老的工程用android-apt编译,如果要在新的AndroidStudio编译至少需要修改一下几部分: 1. 修改project里的build.gradle dependencies { cla ...
- Input文本框属性及js
<input id="txt_uname" maxlength="16" onblur="validata()" onkeyup=&q ...
- mysql开启慢查询日志以及查看(转载自网络)
转载自http://database.51cto.com/art/201309/410314_1.htm
- VS2008中C#开发webservice简单实例
1.创建工程 文件-> 新建->网站 如下图. 工程建好后,会自动添加如下代码: using System; using System.Linq; using System.Web; us ...
- 1034: [ZJOI2008]泡泡堂BNB
1034: [ZJOI2008]泡泡堂BNB Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3234 Solved: 1655[Submit][St ...