2019/10/17 03-文件指针操作

在这里插入图片描述
文件最常用的操作是打开之后才能进行读和写,还有就是一个权限 了,权限是用操作系统控制的,能不能访问文件,操作系统需要做一些控制的,能不能打开就提示给你了,写入的时候可能就出现问题 了
在这里插入图片描述
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功能,是调用的操作系统的资源,没有 操作系统什么都做不了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值