2019/10/21 03-StringIO和BytesIO和os.path

在这里插入图片描述
stringio是个类,是io模块里面的东西,io是input,output
类就需要用到初始化方法
其实是个类文件对象,文件有什么,它就有什么,但是有一些区别,是在内存中纯粹生成的东西,是让你在内存存一下数据的

在这里插入图片描述
写点东西进去
在这里插入图片描述
指针回到开始
在这里插入图片描述在这里插入图片描述
但是我们并没有设定读和写的模式
在这里插入图片描述
stringio是一个内存流放文本IO,textbuffer是一个临时的缓冲区,close就不要了,没有对应的文件系统的东西,没有跟文件系统对应起来,(文件有个缓冲区,要写进来,先放到缓冲区里)所以这里是在内存当文件用,但是根本不写入磁盘
在这里插入图片描述
seek是影响read方法,因为它是类文件对象,没有必要再生成另外一套东西,所以stringio搞了个新方法,getvalue,把所有的内容都拿到,因为在内存拿内容太容易了
在这里插入图片描述
敲tab补全的,意味虽然从基类继承了这个方法,但是根本没有实现,文件系统根本找不到,因为是纯内存的,开创了一个text buffer 文本缓冲区给你使用在这里插入图片描述在这里插入图片描述在这里插入图片描述
其他跟我们之前差不多,还要个方法是getvalue,可以获得很多次
还有个bytesIO
在这里插入图片描述在这里插入图片描述在这里插入图片描述
bytesIO和sytringIO都是在内存中构建的所谓的流,这个流背后其实是个缓冲区,buffer,这个缓冲区对于stringIO来讲是操作string的(当字符看,字符跟编码相关),bytesio还是字节,就跟编码无关,所有的操作跟我们对之前文件的操作,没什么差别,接口都是一样

获得一个stringIO ,用with语法没什么问题,对于类文件对象,他们的操作都是一样的,类文件对象和文件对象都支持上下文管理在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在内存中临时使用,用stringIO,bytesIO是比较好的,只要把内存的数据搬到内存就是落地,少落地意味数据在内存中存在时间过长,内存掉电就除了问题
windows10可能是最后一版,他也遇见了windows必将会死亡,必须要进化,磁盘IO是比较大的问题,没有哪个单位都是使用的固态硬盘,比如内存做缓存的,大量使用redis,也就是个别有钱单位做的,但是一般都是内存有限大量写磁盘,但不是频繁写磁盘,意味要少落地,stringio就是一个选择,stringio可以getvalue写到磁盘上去,必要的时候落地,拿到这个string ,写到磁盘上去
我们要减少磁盘的读取和写入,磁盘也是有缓存的,读取是可以利用磁盘缓存的,所以读取往往速度快,但是写入就慢,能少磁盘IO就少,应该多使用内存的机制来缓存,磁盘也会帮你缓存一部分,作为提速的部分,但是这是保不齐的事情,不能当真
磁盘写入比读取还慢,能少写就少写,但是你关心的数据必定要落地,需要的时候批量操作,不要一个字节一个字节,一批一批做更好

在这里插入图片描述
bytesio一样,只不过写法区别,需要按bytes操作
在这里插入图片描述在这里插入图片描述
stdout标准输出,stderr标准输入错误,是内存中的io流
在这里插入图片描述
前面没有out
在这里插入图片描述在这里插入图片描述
XYZ打印出来是红色的,print感觉是在屏幕上输出的,也就是stdout标准输出,print本质上是调用的stdout,调用stdout的write方法然后把f输出,f是个二进制,输出的时候做了字符串表达,相当于在这里插入图片描述
相当于打印字符串,扔给stdout同时告诉他,默认在后面追加一个\n,它把这个字符串交给标准输出,用它的write方法写到屏幕上去,显示,默认在后面追加\n在这里插入图片描述在这里插入图片描述
虽然标准错误输出也是输出到设备上来的,但是换了个颜色
在这里插入图片描述
stdout是不可读的,模式说的很清楚,都是w的
在这里插入图片描述
**这三个都是类文件对象,文件夹封装的类都一样,这些按道理都不是文件对象,但是被包装成了类文件对象,包装成类文件对象便于你理解
标准输入解决读的问题,标准输出解决写的问题,这些东西都是类文件对象,可以write read
**在这里插入图片描述
也可以seekable,类文件对象,关键是你要去写入和读取什么,实际上这些接口跟文件对象的接口是差不多的,不要close,不要把标准输出关掉
在这里插入图片描述
stringIO和bytesIO创建的是类文件对象,但是在问及系统上没有对应的关系,stdin,stdout,stderr其实都是类文件对象,有的支持读有的支持写,写出来方式有些不一样,虽然都是往屏幕上写,都是可以用文件接口进行操作的,类文件对象操作接口跟文件接口类似

f.write相当于 f=stdout在这里插入图片描述、路径操作,路径是文件的组成方式,一个目录不建议塞上万个文件,linux和unix都是从根目录,是一个目录树,linux更多的是挂载其他资源,因为一切皆文件,就连目录都是特殊文件
windows的A:C:D:盘是逻辑驱动器(字母用完,认为单机不可能这么多盘),跟物理 的并不对应

在这里插入图片描述
打开目录就提示错误,因为目录总不能编程string流给你打开,open方法主要是打开文件的,不管文件什么编码,都能当字节流看,目录自然有目录的操作,
目录操作有两种风格,在3.4之前,os.path模块

在这里插入图片描述
join是把字符串连接在一起,路径连接和字符串连接
字符串是“”连接符.join
path.join用什么倒是没有指明
把这个三部分确实连接在一起了,但是是使用反斜杠,因为windows操作系统默认分隔符是反斜杠,但是windows和linux都支持斜杠,windows默认是反斜杠

在这里插入图片描述
linux下在这里插入图片描述
返回的类型是字符串,操作类型也是字符串
在这里插入图片描述
判断这个路径是否存在
在这里插入图片描述
o驱动器下面的跟 o:/
在这里插入图片描述
o下面有没有tmp目录
在这里插入图片描述
这是按照最后一个分隔符切的
在这里插入图片描述
绝对路径
在这里插入图片描述
应该是找当前驱动器根目录下的a
在这里插入图片描述
windows只能找到某个盘符下的,没有总的跟
在这里插入图片描述
这是拼windows的
在这里插入图片描述
、目录名和文件名
在这里插入图片描述
这一步用的非常多,如果是个目录,你的父目录是谁
在这里插入图片描述
对test来讲,这个是一个目录,特殊的文件,目录就是前一部分,对于文件夹都是特殊的文件在这里插入图片描述
基名和目录名
在这里插入图片描述
按照驱动器切,windows特有的
在这里插入图片描述
linux就没有
在这里插入图片描述
等于从最内层开始打印每一层的路径名
在这里插入图片描述
用新的写法会出错
在这里插入图片描述在这里插入图片描述
path.basename是拿什么的,基名
path.dirname在标准库经常见到声影,一般取当前的路径,找相对路径

知道这个路径就可以找相邻的其他文件了,知道了自己的绝对路径就知道了别人的绝对路径

在这里插入图片描述3。4之前一般都用操作系统os这个模块,底下有path这个模块,非常常用
在这里插入图片描述
pathlib提供了类似面向对象的操作方式,操作的对象是path,用path的方法来操作字符串
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值