python像操作文件一样操作内存的模块 StringIO

摘要:
用来进行输入输出操作的流就称为IO流。StringIO简介StringIO是以流的方式对内存输入输出字符串。StringIO的行为与file对象非常像,大多数方法使用都相似。但它不是磁盘上文件,而是一个内存里的"文件",在内存中读写str,我们可以像操作磁盘文件那样来操作StringIO,主要用于在内存缓冲区中读写数据。使用方法导入python3中导入模块:fromioimportStringIO初始化f=StringIOStringIO对象被创建时,可通过字符串传递给对象初始化到一个现有的字符串。如果没有给出字符串,StringIO则将开始为空。

python像操作文件一样操作内存的模块 StringIO第1张

io流(io stream)
流是一种抽象概念,它代表了数据的无结构化传递。按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列。从流中取得数据的操作称为提取操作,而向流中添加数据的操作称为插入操作。用来进行输入输出操作的流就称为IO流。换句话说,IO流就是以流的方式进行输入输出。

输入输出(IO)是指计算机同任何外部设备之间的数据传递。常见的输入输出设备有文件、键盘、打印机、屏幕等。数据可以按记录(或称数据块)的方式传递,也可以流的方式传递。所谓记录,是指有着内部结构的数据块。记录内部除了有需要处理的实际数据之外,还可能包含附加信息,这些附加信息通常是对本记录数据的描述。

StringIO简介
StringIO是以流的方式对内存输入输出字符串。
StringIO的行为与file对象非常像,大多数方法使用都相似。但它不是磁盘上文件,而是一个内存里的"文件",在内存中读写str,我们可以像操作磁盘文件那样来操作StringIO,主要用于在内存缓冲区中读写数据。

使用方法

导入
python3中导入模块:

from io import StringIO

初始化

f = StringIO([buf])

StringIO对象被创建时,可通过字符串传递给对象初始化到一个现有的字符串。如果没有给出字符串,StringIO则将开始为空。
初始化的数据保存在缓冲区,可选参数buf是一个str或unicode类型。初始化的数据将会与后续写入数据存放一起。

如:aaaaaaaaaabbb会被放在一个缓冲区中。

>>> f = StringIO('aaaaaaaaa')
>>> f.write('bbb')
3
>>> f.getvalue()
'bbbaaaaaa'

原因:
在初始化时写出了aaaaaaaaaa,由于不是写入而是初始化,所以读写位置在下标为0。然后写入bbb,是从下标0开始写的,所以前3个字母会被覆盖。正确的处理方法应该是不使用初始化或者初始化之后将读写位置移动到末尾。

StringIO类中的方法:

(1)、f.read([n])
参数n限定读取长度,int类型;缺省状态为从当前读写位置读取对象中存储的所有数据。读取结束后,读写位置被移动。返回类型和操作file一样,为字符串。

(2)、f.readline([length])
参数length限定读取的结束位置,int类型; 缺省状态为None,从当前读写位置读取至下一个以" "为结束符的当前行。读写位置被移动。返回类型为字符串。

(3)、f.readlines([sizehint])
参数sizehint为int类型;缺省状态为读取所有行并作为列表返回, 且从当前读写位置读取至下一个以" "为结束符的当前行。读写位置被移动。返回类型为列表。

(4)、f.getvalue()
此函数没有参数,无论读写位置在哪里,都能够返回对象output中的所有数据,不影响读写位置。返回类型为字符串。

(1)、f.write(s)
从读写位置将参数s写入给对象output。参数s为str或unicode类型。读写位置被移动。返回类型为写入长度。

(2)、f.writelines(list)
从读写位置将list写入给对象output。参数list为一个列表,列表的成员为str或unicode类型。读写位置被移动。返回None。

操作

(1)、f.truncate([size])
有size参数,无论读写位置在哪里,都从起始位置开始,裁剪size字节的数据,保留到对象中。
无size参数,将当前读写位置之前的数据,裁剪下来

(2)、f.tell()
返回当前读写位置,读写位置默认是0。

(3)、f.seek(pos[,mode])
移动当前读写位置至pos处,
可选参数mode:

  • 为0时将读写位置移动至pos处,mode的默认值为0。
  • 为1时将读写位置从当前位置起向前或向后移动|pos|个长度,
  • 为2时将读写位置置于末尾处再向前或向后移动|pos|个长度;

返回结果为移动后的位置。

(4)、f.close()
释放缓冲区,执行此函数后,数据将被释放,也不可再进行操作。

(5)、f.isatty()
此函数总是返回0。

(6)、f.flush()
刷新内部缓冲区。

简单示例
from io import StringIO

f = StringIO()

f.write('快乐的国庆节
')
f.write('明年再见')


print(f'当前读写位置:{f.tell()}')

print(f.getvalue())
print('*' * 20)

f.seek(0)
print(f'当前读写位置:{f.tell()}')

# 如果不移动读写位置,read读取到的就是末尾的空字符串
content = f.read()
print(content)

当前读写位置:11
快乐的国庆节
明年再见
********************
当前读写位置:0
快乐的国庆节
明年再见

免责声明:文章转载自《python像操作文件一样操作内存的模块 StringIO》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Java准确地获取本地IP地址DevExpress 常用命令包括导出-打印-打印预览等下篇

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

相关文章

python字典

概念 一种通过名字引用值的数据结构为映射,而字典是python中唯一内建的映射类型。字典由多个键与其对应的值构成,键/值也成为项。每个键值之间用冒号隔开,项之间用逗号隔开,整个字典是由一对大括号括起来。空字典不包括任何项。键可以是数字、字符串和元组,并且唯一,但值不唯一。 某些情况,字典比列表更加适用: 表示游戏棋盘的状态,每个键都是由坐标值组成的元...

python使用multiprocessing创建多线程时异常的解决

一.linux   1.可能没有此模块,会抛出异常cannot import name Process,需要安装一下,在终端中使用pip install multiprocessing安装即可。   2.注意不要将文件明设置为multiprocessing.py 二.windows   1.注意不要将文件明设置为multiprocessing.py   2...

Hadoop实战之二~ hadoop作业调度详解(1)

对Hadoop的最感兴趣的地方,也就在于Hadoop的作业调度了,在正式介绍如何搭建Hadoop之前,深入理解一下Hadoop的作业调度很有必要。我们不一定能用得上Hadoop,但是如果理通顺Hadoop的分布式调度原理,在有需要的时候未必不能自己写一个Mini Hadoop~: ) 开始 本文转载自:http://www.cnblogs.com/ship...

Python自动化学习笔记(二)——Jmeter连接数据库、添加压力机、Charles抓包、Python初识

1.Jmeter连接Mysql数据库 1.1添加jar包 选中测试计划,添加jar包 也可以直接将jar包复制到jmeter的lib目录 1.2添加mysql连接信息 测试计划-配置元件-JDBC Connection Configuration,添加Mysql连接信息 Database URL:jdbc:mysql://ip:port/dbname?u...

自动化测试 python2.7 与 selenium 2 学习

windows环境搭建 # 下载 python【python 开发环境】 http://python.org/getit/ # 下载 setuptools 【python 的基础包工具】setuptools 是 python 的基础包工具,可以帮助我们轻松的下载,构建,安装,升级,卸载 python的软件包。 http://pypi.python.o...

Linux等待队列原理与实现

当进程要获取某些资源(例如从网卡读取数据)的时候,但资源并没有准备好(例如网卡还没接收到数据),这时候内核必须切换到其他进程运行,直到资源准备好再唤醒进程。 waitqueue (等待队列) 就是内核用于管理等待资源的进程,当某个进程获取的资源没有准备好的时候,可以通过调用  add_wait_queue() 函数把进程添加到  waitqueue 中,然...