Python3学习笔记23-StringIO和BytesIO
StringIO
很多时候数据读取不一定是文件,也可以在内存中
StringIO顾名思义就是在内存中读写str
要把str写入StringIO,我们需要先创建一个StringIO,然后像文件一样写入即可:
from io import StringIO
f = StringIO()
f.write('Hello')
f.write(' ')
f.write('Word')
print(f.getvalue())
#getvalue()方法用于获得写入的str

要读取StringIO,可以用一个str初始化StringIO,然后,像读文件一样读取:
f = StringIO('Hello!\nHi!\nGoodbye!')
while True:
s = f.readline()#每行读取
if s == '':#当读取到空
break#终止读取
print(s.strip())#strip()去掉首尾空格
BytesIO
StringIO操作的只能是str,如果要操作二进制数据,就需要使用BytesIO。
BytesIO实现了在内存中读写bytes,我们创建一个BytesIO,然后写入一些bytes:
from io import BytesIO
f = BytesIO()
f.write('中文'.encode('utf-8'))#写入的是经过utf-8编码的bytes
print(f.getvalue())
和StringIO类似,可以用一个bytes初始化BytesIO,然后,像读文件一样读取:
f = BytesIO(b'\xe4\xb8\xad\xe6\x96\x87')
print(f.read())
注意事项
指针:可以理解为windows操作界面,操作一个文件时候,比如一个txt文件,鼠标的光标所在的位置
f = StringIO('abc')#第一次初始化
print(f.getvalue())
f = StringIO('asd')#第二次初始化
print(f.getvalue())
可以看出来两次值是不一样的,在初始化的时候,是覆盖原值的,指针永远指向0,也就是文件开头位置
f = StringIO()
f.write('aaa')#第一次写入
print(f.getvalue())
f.write('bbb')#第二次写入
print(f.getvalue()
可以看出来,第二次的值是第一次加上第二次,所以write()方法本质是追加
第一次write的时候,指针是在输入内容后面的
f = StringIO('xxxxxxx')#第一次初始化
print(f.getvalue())
f = StringIO('bbbbbbb')#第二次初始化
print(f.getvalue())
f.write('vvvvvv')#第一次写入
print(f.getvalue())
f.write('nnnnnn')#第二次写入
print(f.getvalue())
通过打印结果可以看出,第一次写入的时候,因为初始化之后的指针是在文件开头的,所以还是覆盖了,但是因为write写入的内容比上一次初始化的内容少,所以还有个b保留了下来,第二次写入的时候因为指针已经在最后面了,所以追加了写入内容
f = BytesIO(b'aaaabbbbcccc')
print(f.read())
print(f.read())
print(f.getvalue())
print(f.getvalue())
getvalue()方法是不管指针在哪,读取所有内容,而file-like Object中的read(),readline(),readlines()方法是需要根据指针所在来进行读取的,所以第一次使用read读取完了之后,光标在文件末尾,所以再次读取,自然读取不到东西
f = BytesIO()
f.write(b'asfsgsgs')
print(f.read())
print(f.getvalue())
同样的道理,因为write()方法写入内容后,指针是在文件末尾的,所以用read()等方法是无法读取到数据的
所以上面两个例子如果想要用read()来读取,需要使用seek()方法改变指针位置
tell()可以获取当前指针所在位置
给上面两个例子加上f.seek(0,0)回到文件开头,就能用read()读取到了
上面所有注意事项在StringIO和BytesIO通用
除了seek()方法第一次参数为负数,负数表示向前移动,只能在BytesIO中使用
Python3学习笔记23-StringIO和BytesIO的更多相关文章
- Python3学习笔记(urllib模块的使用)转http://www.cnblogs.com/Lands-ljk/p/5447127.html
Python3学习笔记(urllib模块的使用) 1.基本方法 urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, ...
- Ext.Net学习笔记23:Ext.Net TabPanel用法详解
Ext.Net学习笔记23:Ext.Net TabPanel用法详解 上面的图片中给出了TabPanel的一个效果图,我们来看一下代码: <ext:TabPanel runat="se ...
- Python3学习笔记 - 准备环境
前言 最近乘着项目不忙想赶一波时髦学习一下Python3.由于正好学习了Docker,并深深迷上了Docker,所以必须趁热打铁的用它来创建我们的Python3的开发测试环境.Python3的中文教程 ...
- python3学习笔记(7)_listComprehensions-列表生成式
#python3 学习笔记17/07/11 # !/usr/bin/env python3 # -*- conding:utf-8 -*- #通过列表生成式可以生成格式各样的list,这种list 一 ...
- python3学习笔记(6)_iteration
#python3 学习笔记17/07/10 # !/usr/bin/env python3 # -*- coding:utf-8 -*- #类似 其他语言的for循环,但是比for抽象程度更高 # f ...
- python3学习笔记(5)_slice
#python3 学习笔记17/07/10 # !/usr/bin/env python3 # -*- coding:utf-8 -*- #切片slice 大大简化 对于指定索引的操作 fruits ...
- python3学习笔记(4)_function-参数
#python学习笔记 17/07/10 # !/usr/bin/evn python3 # -*- coding:utf-8 -*- import math #函数 函数的 定义 #定义一个求绝对值 ...
- Python3学习笔记01-环境安装和运行环境
最近在学习Python3,想写一些自己的学习笔记.方便自己以后看,主要学习的资料来自菜鸟教程的Python3教程和廖雪峰官方网站的Python教程. 1.下载 1)打开https://www.pyth ...
- python3学习笔记(9)_closure
#python 学习笔记 2017/07/13 # !/usr/bin/env python3 # -*- conding:utf-8 -*- #从高阶函数的定义,我们可以知道,把函数作为参数的函数, ...
随机推荐
- SP1805 HISTOGRA (单调栈)
单调栈维护栈顶为高度最大的 记下来栈中每个元素入栈时顶掉的最靠左的一个位置(如果没顶掉就是它本身),那么在它出栈的时候,它所带来的面积就是(出栈位置-记录位置)*高度 (可能会有加一减一之类的细节) ...
- .net连接ORACLE数据库
这段时间维护客户的一个系统,该系统使用的是ORACLE数据库,之前开发的时候用的都是MSSQL,并没有使用过ORACLE.这两种数据库虽然都是关系型数据库,但是具体的操作大有不同,这里作下记录. 连接 ...
- RMQ求解->ST表
ST表 这是一种神奇的数据结构,用nlogn的空间与nlongn的预处理得出O(1)的区间最大最小值(无修) 那么来看看这个核心数组:ST[][] ST[i][j]表示从i到i+(1<<j ...
- 1: Myeclipse10 优化设置
一.myeclipse字体设置 Window->Preferences->General->Appearance->Colors and Fonts 在右侧找到”Aa Test ...
- react中实现点击跳转到新页面方法
实现点击跳转到新页面,可以有两种形式,一个是本地页面打开,一个是本地页面不变跳转到新的页面. (一)页面点击本地页面打开新页面 引入ant的Button组件 <Button style={{ba ...
- TCP协议、UDP协议、端口、套接字
TCP协议优缺点 可靠:反馈数据是否送达 效率低:需要创建连接请求,连接成功后发数据 UDP协议优缺点 不可靠:无任何反馈 效率高:不创建连接请求,直接发数据 端口(0~65535,其中0~1023用 ...
- SQL Server 关于CROSS APPLY 和 OUTER APPLY应用
先看看语法: <left_table_expression> {cross|outer} apply<right_table_expression> 再让我们了解一下appl ...
- saltstack安装与配置
Saltstack是基于Python开发的一套C/S架构,具备Puppet.Ansible功能于一身的配置管理工具,功能十分强大,各模块融合度及复用性极高:使用号称世界上最快的消息队列ZeroMQ使得 ...
- GoLang基础数据类型--->字典(map)详解
GoLang基础数据类型--->字典(map)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 可能大家刚刚接触Golang的小伙伴都会跟我一样,这个map是干嘛的,是 ...
- 数据结构(六)查找---平衡二叉树(ASL)
前提 我们之前的二叉排序树的插入(构建)是按照我们输入的数据来进行的,若是我们的数据分布不同,那么就会构造不同的二叉树 { , , , , , , , , , } { , , , , , , , , ...