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,从当前读写位置读取至下一个以"\n"为结束符的当前行。读写位置被移动。返回类型为字符串。

(3)、f.readlines([sizehint])

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

(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('快乐的国庆节\n')
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
快乐的国庆节
明年再见

实战使用

从链接中读取文件

import io
import csv
import requests course_2022 = set()
url = "https://media-zip1.baydn.com/storage_media_zip/sclorg/ca7dd3c92959339334baed3f7a7be610.d0b71aba48304d1621c9a93f07233786.csv"
resp = requests.get(url)
resp.encoding = "utf-8"
# 将文件流转成StringIO
csv_reader = csv.reader(io.StringIO(resp.text))
for line in csv_reader:
if line[-1] != "":
course_2022.add(line[-1])

python像操作文件一样操作内存的模块 StringIO的更多相关文章

  1. python学习笔记---文件的操作

    数据的保存: 1.内存:常用的变量2.文件:文本内容,二进制的文件内容3.数据库: 读文件:1.要读取的文件路径一定要存在.2.打开存在的文件:open函数    参数1:文件的路径,相对的或者是绝对 ...

  2. python学习8 文件的操作

    本文拷贝了on testing 的<python之文件操作:文件的读写>,只做学习之用 python的文件读写通过 一.用open函数 二.对文件读写操作 三.读取文件位置定位 1. op ...

  3. Python:目录和文件的操作模块os.path和OS常用方法

    1.目录和文件的操作模块os.path,在使用之前要先导入:import os.path.它主要有以下几个重要的功能函数: #!/user/bin/python #coding= utf-8 impo ...

  4. Python中xlrd和xlwt模块使用方法 (python对excel文件的操作)

    本文主要介绍可操作excel文件的xlrd.xlwt模块.其中xlrd模块实现对excel文件内容读取,xlwt模块实现对excel文件的写入. 安装xlrd和xlwt模块 xlrd和xlwt模块不是 ...

  5. python 基础之文件读操作

    创建一个名为‘尘曦’的文件内容如下 Hadoop是一个由Apache基金会所开发的分布式系统基础架构. 用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速运算和存储. ...

  6. python 异常处理、文件常用操作

    异常处理 http://www.jb51.net/article/95033.htm 文件常用操作 http://www.jb51.net/article/92946.htm

  7. python(三)一个文件读写操作的小程序

    我们要实现一个文件读写操作的小程序 首先我们有一个文件 我们要以"============"为界限,每一个角色分割成一个独立的txt文件,按照分割线走的话是分成 xiaoNa_1. ...

  8. Python档案袋(文件系列操作 )

    文件读写基础 简单的读文件: # r 表示只能读 #打开文件,得到文件光标对象,文件不存在则报错 f=open("ww.txt","r",encoding=&q ...

  9. Python基础灬文件常用操作

    文件常用操作 文件内建函数和方法 open() :打开文件 read():输入 readline():输入一行 seek():文件内移动 write():输出 close():关闭文件 写文件writ ...

  10. python批量进行文件修改操作

    python批量修改文件扩展名 在网上下载了一些文件,因为某种原因,扩展名多了一个后缀'.xxx',手动修改的话因为文件太多,改起来费时费力,于是决定写个小脚本进行修改. 1.要点: import r ...

随机推荐

  1. JavaScript高级程序设计笔记03 语言基础

    语言基础 主要基于ES6. 一切都区分大小写.无论变量.函数名还是操作符 标识符 变量名.函数名.属性名.参数名 可由一个或多个字符组成: 第一个必须是字母._或者$: 其余的可以是字母._.$或者数 ...

  2. Hdu4742 (CDQ分治)

    题意:给出n个三维点对(x,y,z),可随意排列,求三维非严格最长上升子序列长度和最长上升子序列数量. 输入格式:第一行为一整数T表示用例组数,每组用例第一行为一整数n表示点数,之后n行每行三个整数x ...

  3. JTAG串链

  4. uniapp的下载

    简介 - HBuilderX 文档 (dcloud.net.cn) 下载Hbuiler 直接打开HbuilderX.exe就可以直接使用 可以通过他来创建模板 目录

  5. MyBatisPlus简介

    MyBatisPlus特性 国内的一个网站 网站地址简介 | MyBatis-Plus (baomidou.com)

  6. MongoDB中的分布式集群架构

    MongoDB 中的分布式集群架构 前言 Replica Set 副本集模式 副本集写和读的特性 Sharding 分片模式 分片的优势 MongoDB 分片的组件 分片键 chunk 是什么 分片的 ...

  7. Oracle体系机构、基本术语

    oracle实例.oracle数据库.oracle服务器,这三个术语容易混淆. oracle实例 实例是一个非固定的.基于内存基本进程和内存接口生成.当oracle服务器关闭后,实例也就消失. ora ...

  8. python tkinter使用(四)

    python tkinter使用(四) 本篇文章主要讲下tkinter 的文本框相关. tkinter中用Entry来实现输入框,类似于android中的edittext. 具体的用法如下: 1:空白 ...

  9. HP LoadRunner 11.00安装+破解+汉化

    里面包含多个破解码,最高支持6.5w个并发: https://blog.csdn.net/xianjie0318/article/details/78625980

  10. 怎样在Facebook上开发客户

    尽管Facebook的主打社交和娱乐,但它仍是一个有助于开发外贸客户的重要平台.通过利用Facebook的广告.社群.内容分享和直接沟通等功能,您可以扩大您的业务网络,找到更多的外贸客户,并促成国际贸 ...