文件最常用的操作是打开之后才能进行读和写,还有就是一个权限 了,权限是用操作系统控制的,能不能访问文件,操作系统需要做一些控制的,能不能打开就提示给你了,写入的时候可能就出现问题 了
windows打开方式是gbk的,linux是utf-8
独立的是rwxa,
不能独立的时候bt+
发现问题,写完数据发现读不了,但是cat看到文件内容已经写到磁盘上去了,r+打开了一个文件,写完内容之后,再打开一看,前面部分被覆盖掉了,这里面有指针是看不见的,叫文件指针,不管怎么样这个指针都会移动,从当前卫向后写入,因为是个序列,从前向后,意思写完之后,指针又会发生移动
EOF代表文件末尾
tell是告诉当前指针位置在哪里
seek (offset[,whence]移动文件指针位置,offset便宜多少自己额,whence从哪里开始)
tell当前在哪里是一个数字
先用文本模式打开
让指针seek偏移2个,seek有两个参数,偏移量和开始位置
0文件头
1相对位置
2文件尾
0等于一个缺省值
后面的1代表相对位置,相对于当前
与当前相对的seek方式不允许使用非0
0代表头,2代表尾,从相对尾巴开始走0步,相对于尾巴0步,就到尾巴后面去了
到文件头
0如果相对于2来讲就跳到尾巴那去了,如果相对开头,就是回到文件首部
尾部倒着走一个,如果相对于尾巴的seek方式,只允许非0
在这种情况下
**相对于开头-1,出去?
**
这个也出去了,代表不允许负的
它自己定的正数无所谓
read是空的
read一下,发现800还是没数据,但是指针确实在800
文本模式下是可以挪动文件指针的,如果使用0,文件头开始,负的是不允许的,但是正的就可以,指针超过范围就什么都读不到了,合理的范围都是可以读到数据的
使用1是相对位置,明确告诉你不允许使用非0,使用相对等于是原地踏步
2相对于文件的末尾,使用非0,就直接拉到文件的EOF处
一般相对开始和结尾用的比较多,比如快速定位到文件末尾(0,2),回到开头(0),这种方式很快就可以在文件中进行操作指针,
在0的时候,负数不能用,正数随你写
在2尾部相关的时候,只能写0,只能把指针指向文件尾部
关掉之后,读写兼备,二进制的方式
seek(0)回到文件开头
拉到尾部
什么都没有,因为已经到结尾了
回到开头读就没什么大问题
2开始读
0,1是原地踏步,相对位置走0
相对位置2走0,就是2
可以走-1
再走-1
拉回到2的位置
相对于这个位置向后走两个,2,1,说明在字节操作模式下,可以前后挪动的
到结尾处,向前走一个
相对尾部,往后走一个,在文本模式下不能在结尾走非0的值
非法参数,向左超界都不太喜欢
这样就是在接收范围之内
先改成200
相对位置在哪就在哪,但是2是要求回到结尾
但是一般没人这么用,一般我们都是在合理的范围查看文件,不要试探向左超界,向右超界(跟切片,一样,虽然可以超界,但是写代码不要这么写,控制索引范围,不要随便超出去)
在1上往后走3
**在字节操作中,是可以做到很大范围调整的,
可以用1相对位置方式进行正负,
用2 的方式也可以正负
**
在二进制模式下,如果使用seek相对,或者相对于结尾,取值范围是可正可负,向左不能超界,向右随你写,
用完关闭
再写一遍,二进制写wb+,也可以读,原来就没有数据了,被覆盖了,开始用中文,二进制不认字符就只能用encode转成bytes
指针已经到写入的后面了,就读不到任何东西
seek 0是回到开头,tell告诉你位置
在二进制模式下准备挪动,相对开头挪动一个
在字节模式下,seek 1代表一个字节,已经到 了结尾了
虽然写了两个中文字符,但是使用的utf-8是6个字节
继续修改,用文本来读取+
0回到开头
移动的时候还是以字节,seek和tell讲的是文件指针,文件指针其实跟字符没有关系
回到0读取没有任何问题
回到第一个字节开始读,对于utf-8就不知道该怎么翻译了,utf-8对于第一个字节其实是有一定的要求的
高位要求大一点,9太小,跳过第一个字节,第二个0x95,这个高位9是比较低的 ,所以带来这样的问题、
utf-8是要套一个取值范围告诉自己,是2个字节还是3个字节
操作文本,除了移动开头和移动结尾,就不要其他操作了,因为移动不好就出现异常了,所以使用时要尽量注意这点,对于中文就不要乱移动
在操作字节流的时候无所谓,在字符的时候,给半个字符,是没办法给你显示的,在字节的世界没有文本的概念,在文本的世界里是有编码的概念的,到底用几个字节来表现一个字符就不能乱移动了
关闭
seek只关心偏移几个字节
对于中文要特别小心
seek0 返回开始位置
查看read是进行字符操作还是字节操作,说明在文本模式下,确实读了两个字符
改成对字节操作的方式
read方式和你什么方式打开有关,文本打开就处理字符
读和写和你打开的模式有关,如果是文本模式,读和写都是操作字符的,二进制模式,读和写操作的都是字节,seek例外,它是指针,按字节指(随便指,)但是按字符可不能乱指
直接抛出异常,seek偏移的是字节
seek3是跳过一个自己额,中文字节占了三个字节或者2个字节,具体要查编码表
可以转成utf-8的看看
seek是只认字节,是按字节偏移的,操作的时候不可以左超界,可以右边超界,在字节操作模式下,写入的时候,就需要用bytes
文件操作是系统功能,不是python功能,是调用的操作系统的资源,没有 操作系统什么都做不了