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

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类型。初始化的数据将会与后续写入数据存放一起。
如:aaaaaaaaaa和bbb会被放在一个缓冲区中。
>>> 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的更多相关文章
- python学习笔记---文件的操作
数据的保存: 1.内存:常用的变量2.文件:文本内容,二进制的文件内容3.数据库: 读文件:1.要读取的文件路径一定要存在.2.打开存在的文件:open函数 参数1:文件的路径,相对的或者是绝对 ...
- python学习8 文件的操作
本文拷贝了on testing 的<python之文件操作:文件的读写>,只做学习之用 python的文件读写通过 一.用open函数 二.对文件读写操作 三.读取文件位置定位 1. op ...
- Python:目录和文件的操作模块os.path和OS常用方法
1.目录和文件的操作模块os.path,在使用之前要先导入:import os.path.它主要有以下几个重要的功能函数: #!/user/bin/python #coding= utf-8 impo ...
- Python中xlrd和xlwt模块使用方法 (python对excel文件的操作)
本文主要介绍可操作excel文件的xlrd.xlwt模块.其中xlrd模块实现对excel文件内容读取,xlwt模块实现对excel文件的写入. 安装xlrd和xlwt模块 xlrd和xlwt模块不是 ...
- python 基础之文件读操作
创建一个名为‘尘曦’的文件内容如下 Hadoop是一个由Apache基金会所开发的分布式系统基础架构. 用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速运算和存储. ...
- python 异常处理、文件常用操作
异常处理 http://www.jb51.net/article/95033.htm 文件常用操作 http://www.jb51.net/article/92946.htm
- python(三)一个文件读写操作的小程序
我们要实现一个文件读写操作的小程序 首先我们有一个文件 我们要以"============"为界限,每一个角色分割成一个独立的txt文件,按照分割线走的话是分成 xiaoNa_1. ...
- Python档案袋(文件系列操作 )
文件读写基础 简单的读文件: # r 表示只能读 #打开文件,得到文件光标对象,文件不存在则报错 f=open("ww.txt","r",encoding=&q ...
- Python基础灬文件常用操作
文件常用操作 文件内建函数和方法 open() :打开文件 read():输入 readline():输入一行 seek():文件内移动 write():输出 close():关闭文件 写文件writ ...
- python批量进行文件修改操作
python批量修改文件扩展名 在网上下载了一些文件,因为某种原因,扩展名多了一个后缀'.xxx',手动修改的话因为文件太多,改起来费时费力,于是决定写个小脚本进行修改. 1.要点: import r ...
随机推荐
- weblogic端口号和内存怎么修改?
在WebLogic中修改端口号和内存分配是一项重要的任务,它涉及到服务器性能和应用程序的可靠性.下面我将详细介绍如何修改WebLogic的端口号和内存设置. 修改端口号 WebLogic使用多个端口来 ...
- Linux笔记03: Linux常用命令_3.2目录操作命令
3.2 目录操作命令 3.2.1 ls命令 ●命令名称:ls. ●英文原意:list directory contents. ●所在路径:/usr/bin/ls. ●执行权限:所有用户. ●功能描述: ...
- Go语言实现GoF设计模式:适配器模式
本文分享自华为云社区<[Go实现]实践GoF的23种设计模式:适配器模式>,作者:元闰子. 简介 适配器模式(Adapter)是最常用的结构型模式之一,在现实生活中,适配器模式也是处处可见 ...
- storeToRefs()的作用和使用
store 是一个用 reactive 包装的对象,这意味着不需要在 getters 后面写 .value,就像 setup 中的 props 一样,如果你写了,我们也不能解构它: <scrip ...
- bash shell笔记整理——less命令
less命令的作用 less和cat.more最大的差别在于不会一次性加载整个文件,速度比较快!另外less具备翻页功能,可以向上/向下翻页! 语法 less [选项] [文件名] *选项* *使用说 ...
- MySQL 数据目录
MySQL 的数据目录 1. MySQL 的主要目录结构 方式1:通过命令搜索 find / -name mysql 方式2(推荐):通过查看配置文件获取目录结构 vim /etc/my.cnf (重 ...
- String与StringBuilder的互相转换
String与StringBuilder的互相转换 String转StringBulider StringBuilder sb = new StringBuilder(); sb.append(use ...
- ElasticSearch之cat plugins API
命令样例如下: curl -X GET "https://localhost:9200/_cat/plugins?v=true&pretty" --cacert $ES_H ...
- 屎山代码风格指南(避免被优化&&避免被接盘)
欢迎补充!!! 序言 良好的代码结构:Bad 使用有意义的变量和函数名,遵循命名规范,使代码易于理解. 组织代码,使用适当的文件和文件夹结构,保持模块化. 避免全局变量的滥用,尽量使用局部作用域. 单 ...
- [Luogu 4998 信号塔] 题解报告
估计没人看的简化版题意: 给定一个数轴,以及数轴上的 \(n\) 个点(这些点可能坐落在同一坐标上),第 \(i\) 个点的坐标为 \(a_i\) .现在要在数轴上找 \(k\) 个点,第 \(i\) ...