2019/10/17 05-文件对象的读写方法

2019/10/17 05-文件对象的读写方法_第1张图片
只要是字符都跟编码相关,如果要把一个文件当某种字符来看,就要告诉你到底是哪个编码表去找,
字节流跟字符无关,一个字节8位,字节和字符有关,是按照1个字节理解还是2个字节理解,还是变长字节理解,所以就看是文本处理还是二进制处理,这两种方式就决定了你到底用不用编码表
2019/10/17 05-文件对象的读写方法_第2张图片
指定一个编码即可,在二进制的时候就跟编码无关了在这里插入图片描述
这时候把b去掉

2019/10/17 05-文件对象的读写方法_第3张图片
写的时候指针在最后了。seek0把指针调整到开头2019/10/17 05-文件对象的读写方法_第4张图片2019/10/17 05-文件对象的读写方法_第5张图片
flush就写进去了
2019/10/17 05-文件对象的读写方法_第6张图片
ansi可以理解为gbk
2019/10/17 05-文件对象的读写方法_第7张图片
b0 a1天字第一号在这里插入图片描述
采用另外的方式
2019/10/17 05-文件对象的读写方法_第8张图片
写入的时候是按照windows默认的gbk双字节写入的,但是在这里按照utf-8读取,如果使用utf-8模式写入之后,读取的时候不加编码,但在windows是按照默认的gbk打开的
2019/10/17 05-文件对象的读写方法_第9张图片
如果使用ascii编码外的字符,一定要指定编码格式,写入的格式应该跟读取的格式一样,否则就会出现这样的问题,pyhon认识,utf8和utf-8,但是有些地方不认

在windows是双字节的,linux utf-8的就是三字节的,如果你写的跨平台,打开或者写入一定要把后面的encoding加上,写死utf-8,这样就不会出现问题了
2019/10/17 05-文件对象的读写方法_第10张图片
这边最高位算出来的值都是很大的
在这里插入图片描述
errors就是问你要不要捕捉编码产生的错误,如果是none或strict就立即抛出异常,ignore表示忽略,如果抛出异常,代表当前线程的结束,整个程序就崩了,可以使用异常捕获

newine指的的是新行,新行如何处理的问题2019/10/17 05-文件对象的读写方法_第11张图片2019/10/17 05-文件对象的读写方法_第12张图片
w等于写的是白纸,先写入然后再读取2019/10/17 05-文件对象的读写方法_第13张图片
看起来比较麻烦修改一下,改成b二进制,二进制需要用二进制的方式写入,读到的就是bytes
2019/10/17 05-文件对象的读写方法_第14张图片
先写入这个文件,然后按照不同的newline去读

![在这里插入图片描述![](https://img-blog.csdnimg.cn/201910180949295.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMjI3ODE4,size_16,color_FFFFFF,t_70)第一次用none读,默认
2019/10/17 05-文件对象的读写方法_第15张图片
’'空的情况
在这里插入图片描述
\n,相当于指定\n是换行符
在这里插入图片描述
\r\n是换行符,就在后面断开了
在这里插入图片描述
你写的文本,他要读取所有行readlines,就需要理解什么是行
2019/10/17 05-文件对象的读写方法_第16张图片
’'空就不做替换,依然认为这些都是操作系统认可的,\n这些东西是linux,unix认可的,\r\n是windows支持的,\r是mac
在这里插入图片描述
*n作为换行符,就只能给你2行*
在这里插入图片描述
none会替换换行符,替换成\n,一般情况下这个参数使用缺省是比较好的,因为用缺省就鞥断出来 正好是你想要的几行2019/10/17 05-文件对象的读写方法_第17张图片在这里插入图片描述
closefd,默认情况是True,用完之后会把文件描述符关闭,否则closefd基本上文件描述符依然保持着,文件描述符不可能无限制使用
标准输入,标准输出,标准错误输出分别对应的描述符是012,,这三个设备就占据三个文件描述符,当你打开一个文件的时候会分配一个文件描述符给你,这个文件描述符的资源其实是有限的,甚至有的地方是有上线的。打开一个设备等于的开一个文件,只要不释放掉,文件描述符就分配给你了,但是文件描述符是有上线的,不允许你超越上线,你超越上线可能资源不够了,所以文件描述符不可能分配无限资源给你
一旦closefd确实需要回收描述符,因为文件描述符是有限的,每成功打开一个文件,会获得一个文件描述符,这个文件描述符是一个整数

2019/10/17 05-文件对象的读写方法_第18张图片
现在文件描述符是6
2019/10/17 05-文件对象的读写方法_第19张图片
对于一个打开的文件和设备都需要一个文件描述符,
提示不能再关闭的文件进行IO操作

2019/10/17 05-文件对象的读写方法_第20张图片
除非有特别用处否则不要这么做,记住,文件描述符是计算机的一种资源,可以表示文件打开后的一个独立ID,称为文件描述符,是一个整型数据,
前面的0,1,2是标准输入,标准输出,标准错误输出

在这里插入图片描述
字节打开一个文件会占掉一个文件描述符,打开的时候虽然newline缺省值是none,但是实际会把文件理的换行符做替换,大多数是做文本处理,编码是必须知道的
缓冲区在进行二进制操作的时候可能要调整下

2019/10/17 05-文件对象的读写方法_第21张图片
文件指针在二进制下,可以任意挪动,但是不能超过左边界,文本就是到开头,结尾,相对位置,右超界都是可以的,seek是按照字节走的
2019/10/17 05-文件对象的读写方法_第22张图片
一个读三个写rwxa,剩下的不能独立存在bt+,文本模式跟字符相关,二进制模式跟字节相关2019/10/17 05-文件对象的读写方法_第23张图片
在文本 模式下读字符,二进制下读字节,字节就是序列没有换行的概念
在这里插入图片描述
在这里插入图片描述
读7相当于读7个字符

2019/10/17 05-文件对象的读写方法_第24张图片
二进制读字节
2019/10/17 05-文件对象的读写方法_第25张图片
保存text2
2019/10/17 05-文件对象的读写方法_第26张图片
读不到是因为指针的问题
2019/10/17 05-文件对象的读写方法_第27张图片2019/10/17 05-文件对象的读写方法_第28张图片)2019/10/17 05-文件对象的读写方法_第29张图片
readlines现在就断开了
2019/10/17 05-文件对象的读写方法_第30张图片
还可以迭代,print自带换行所以显得比较大
2019/10/17 05-文件对象的读写方法_第31张图片2019/10/17 05-文件对象的读写方法_第32张图片
size是设置一行内读取几个字符,readline本身是读一行
2019/10/17 05-文件对象的读写方法_第33张图片
readlines是你要返回几行,这样还不如迭代的时候控制,几行一停,生成器就可以搞定
2019/10/17 05-文件对象的读写方法_第34张图片
基本上按行迭代,没有用readlines
readlines特点是立即返回一个列表,f2确实是一个可迭代对象,迭代f2是要一个给你一个
readlines是把文件立即处理,返回一个所有行的列表
2019/10/17 05-文件对象的读写方法_第35张图片2019/10/17 05-文件对象的读写方法_第36张图片
可以2行2行来
2019/10/17 05-文件对象的读写方法_第37张图片2019/10/17 05-文件对象的读写方法_第38张图片
一般都是把文件对象,当作可迭代对象,直接对这个文件对象当作可迭代对象
看基本都这么迭代
2019/10/17 05-文件对象的读写方法_第39张图片
write是把你要写的字符串或者bytes扔进去,writelines,是把字符串列表列入文件
2019/10/17 05-文件对象的读写方法_第40张图片
写的数据要么str,要么是bytes 2019/10/17 05-文件对象的读写方法_第41张图片
不能整型
在这里插入图片描述
这里是成功了但是没有写的能力
2019/10/17 05-文件对象的读写方法_第42张图片2019/10/17 05-文件对象的读写方法_第43张图片
给你挤到一块去了
下面换行符就加上去了
readlines是按照换行符读取进来
writelines是把列表输出,但是里面有没有换行符不关心(有些库会替你补换行符)换行符是当前操作系统的换行符
2019/10/17 05-文件对象的读写方法_第44张图片

2019/10/17 05-文件对象的读写方法_第45张图片
2019/10/17 05-文件对象的读写方法_第46张图片
下面是linuex的,上面是windows的
2019/10/17 05-文件对象的读写方法_第47张图片
flush是把缓冲区的数据直接写到磁盘,在close的过程中是可以做flush的
closed知道是不是真的关闭,一个文件对象调用close之后再调用close,本质上没什么大问题
close之后再打开得到的就是另外的文件描述符

2019/10/17 05-文件对象的读写方法_第48张图片
判断这个文件到底是不是可以seek的2019/10/17 05-文件对象的读写方法_第49张图片2019/10/17 05-文件对象的读写方法_第50张图片
允许不允许seekable,这个文件是否可以使用文件指针来回移动
在这里插入图片描述

你可能感兴趣的:(2019/10/17 05-文件对象的读写方法)