Python3 StringIO和BytesIO

摘要:
StringIO的某些接口与文件操作一致。StringIO的行为很像文件对象,但它不是磁盘上的文件,而是内存中的“文件”。S=io。StringIOprint#Result-Heprint#Result-loworlds=io StringIO#5,readline用法:长度用于限制读取的结束位置。类型为int,默认值为None。即,从当前位置读取到下一个以“”结尾的当前行。如果要对二进制数据进行操作,则需要使用BytesIO。BytesIO实现在内存中读取和写入字节。fromioimportBytesIOf=BytesIO()f。Writeprint#b'xe4xb8xadxe6x96x87'#请注意,写入的不是str,而是UTF-8编码的字节。

StringIO的一些接口和文件操作是一致的。StringIO的行为与file对象非常像,但它不是磁盘上文件,而是一个内存里的“文件”。StringIO操作的只能是str

importio
#1、生成一个StringIO对象:
s =io.StringIO()

#2、write()从读写位置将参数s写入到对象s,参数为str或unicode类型,读写位置被移动
s.write('Hello World
')

#3、getvalue()用法:返回对象s中的所有数据
print(s.getvalue())

用write()方法写入的数据,用下面的方法,要将指针位置修改,看最下面的例子
#4、read(n)用法:参数n用于限定读取的长度,类型为int,默认为从当前位置读取对象s中所有的数据。读取结束后,位置被移动。 s = io.StringIO('Hello World ') print(s.read(2)) #结果 He print(s.read()) #结果 llo world s = io.StringIO('Hello World ') #5、readline(length)用法:length用于限定读取的结束位置,类型为int,缺省为None,即从当前位置读取至下一个以' '为结束符的当前行。读位置被移动。 print(s.readline(7)) #结果 Hello W
>>> from io importStringIO
>>> f = StringIO('Hello!
Hi!
Goodbye!')
>>> whileTrue:
...     s =f.readline()
...     if s == '':
...         break...     print(s.strip())
...
Hello!
Hi!
Goodbye!

如果要操作二进制数据,就需要使用BytesIO。BytesIO实现了在内存中读写bytes。

from io importBytesIO

f =BytesIO()
f.write('中文'.encode('utf-8'))
print(f.getvalue())
#b'xe4xb8xadxe6x96x87'#请注意,写入的不是str,而是经过UTF-8编码的bytes。#和StringIO类似,可以用一个bytes初始化BytesIO,然后,像读文件一样读取:

from io importBytesIO

f = BytesIO(b'xe4xb8xadxe6x96x87')
print(f.read())
#b'xe4xb8xadxe6x96x87'

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

#这时候我们需要修改下文件的指针位置#我们发现可以打印出内容了
sio =StringIO()
sio.write(s)
sio.seek(0,0)
print(sio.tell())
for i insio.readlines():
    print(i.strip())

#这就涉及到了两个方法seek 和 tell#tell 方法获取当前文件读取指针的位置#seek 方法,用于移动文件读写指针到指定位置,有两个参数,第一个offset: 偏移量,需要向前或向后的字节数,正为向后,负为向前;第二个whence: 可选值,默认为0,表示文件开头,1表示相对于当前的位置,2表示文件末尾#用seek方法时,需注意,如果你打开的文件没有用'b'的方式打开,则offset无法使用负值哦

参考自廖老师python3和https://zhuanlan.zhihu.com/p/89791673

免责声明:文章转载自《Python3 StringIO和BytesIO》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇迭代器模式 与 C# IEnumerator/IEnumerableDIV和table页面布局的区别和联系下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python2--升级python3

先安装开发工具包:   yum -y group install "Development Tools" 安装Python的依赖包:   yum -y install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel vim  下载最新的Python包:...

Python3读取Excel,日期列读出来是数字的处理

  Python读取Excel,里面如果是日期,直接读出来是float类型,无法直接使用。   通过判断读取表格的数据类型ctype,进一步处理。   返回的单元格内容的类型有5种:   ctype: 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error   ctype =sheet1.cell(iR...

python3编程技巧二——如何在列表、字典、集合 中根据条件筛选数据

一、列表筛选数据 1 #coding=utf-8 2 from random importrandint 3 4 #创建随机列表 5 l = [randint(-10, 10) for i in range(10)] 6 print(l) 7 8 #通过列表解析过滤大于0的数据 9 r = [x for x in l if x >=0] 10...

C#编程总结(十)字符转码

C#编程总结(十)字符转码 为了适应某种特殊需要,字符需要根据规则进行转码,便于传输、展现以及其他操作等。 看看下面的转码,就知道他的用处了。 1、字符串转码 根据原编码格式与目标编码格式,完成转换。不过可能出现乱码哦。上一章已经介绍过了。 代码: /// <summary> /// 字符串编码转换...

Window环境下安装Python2和Python3  

1. 下载安装包 1 2 3 https://www.python.org/ftp/python/2.7.14/python-2.7.14.amd64.msi    # 2.7安装包   https://www.python.org/ftp/python/3.6.4/python-3.6.4-amd64.exe      # 3.6安装包...

oracle 表空间不足解决办法

Oracle表空间不足,一般有两个原因:   1. 原表空间太小,没有自增长;   2. 表空间已自增长,而且表空间也已足够大 检查原因: 1. 查看表在那个表空间 select tablespace_name,table_name from user_talbes where table_name='test'; 2. 获取用户的默认表空...