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 ...
随机推荐
- JPA中@ElementCollection使用
转载请注明出处: 在JPA中,@ElementCollection注解主要用于映射集合属性,例如List.Set或数组等集合属性,以及Map结构的集合属性,每个属性值都有对应的key映射.这个注解可以 ...
- bi报表软件开发的特点什么,产品和流程?
BI报表软件是一种针对企业数据分析和决策支持的工具,具有高度灵活性和易用性.在当前数据化的时代,越来越多的企业开始关注BI报表软件的开发和应用,因为它们可以帮助企业更好地管理数据,更好地进行商业决策. ...
- 数据可视化工具 ,不会写 SQL 代码也能做数据分析
数据可视化工具可以帮助人们以直观.易于理解的方式展现和分析数据.这些工具使得即使不会写 SQL 代码的人也能进行数据分析,并从中获得有价值的信息和见解. 本文将详细介绍几种常用的数据可视化工具及其功能 ...
- ARM汇编指令实验
题目 地址为0x40008000起始的内存中存放了20个无符号的8位整数,请编写ARM汇编程序实现如下功能: 采用冒泡法将以上内存中的数据按照从小到大的顺序排列. 注意:在验收实验时,需要自己把具体的 ...
- SpringCore完整学习教程4,入门级别
本章从第4章开始 4. Logging Spring Boot使用Commons Logging进行所有内部日志记录,但保留底层日志实现开放.为Java Util Logging.Log4J2和Log ...
- Java在指定路径下执行cmd命令的方法
目前状态:毕业设计ing 背景: 做毕设时,由于需要将python的运行效果展示出来,所以使用了Java写了一个前端的界面.但是在使用Java对python的脚本进行调用时就尴尬了,出错-- 这里也许 ...
- bash shell笔记整理——date命令
date命令初步了解 简单来说date的主要作用大多数用于以给定的格式来显示时间. 在后期我们写一些脚本当中也会使用到,比如说按照日期来给文件备份打包等. 下面我们来看看帮助信息: [root@ngi ...
- WPF中 ContextMenu 寻找父物体的一种方案
据了解 ContextMenu 在WPF中实际是以类似于WIndow的呈现方式,所以 ContextMenu 在当前页面的 Visualtree 中是找不到的. 当在Listbox中需要传递当前选中项 ...
- 良心国产工具,比Xshell好用还免费!
使用或维护Linux系统的都知道,我们日常对服务器的操作,一般都会借助SSH工具远程登录到服务器之后进行操作.常用的SSH工具有不少,比如:Xshell.Putty.SSH Secure Shell ...
- libGDX游戏开发之NPC敌人事件(六)
libGDX系列,游戏开发有unity3D巴拉巴拉的,为啥还用java开发?因为我是Java程序员emm-国内用libgdx比较少,多数情况需要去官网和google找资料,相互学习的可以加我联系方式. ...