鄙人学习笔记
文章目录
文件读写偏移量(文件指针)定义举个例子1(读写操作的文件偏移量)举个例子2(文件偏移量的初始位置验证)基本操作举个例子1(tell()函数)举个例子2(tell()函数)举个例子3(seek()函数)文件描述符定义获取文件描述符举个例子文件读写偏移量(文件指针)
定义
打开一个文件进行操作时,系统会自动生成一个记录,记录中描述了我们对文件的一系列操作。其中包括每次操作到的文件位置。文件的读写操作都是从这个位置开始进行的。
备注:在我们open一个文件时,就有了这个文件偏移量,但是当我们重新open的话,这个文件偏移量会被刷新。要注意的是,我们的读写操作用的是同一个文件偏移量。
举个例子1(读写操作的文件偏移量)
康一康下面这段代码:
结果:
我们发现,我们明明写入数据了鸭~为啥,啥都没打印出来?这是为啥呢?
这一切都使偏移量的错,都是你!
因为我们一个文件对象,只拥有一个文件偏移量,无论是读取还是写入,用的都是同一个偏移量。当我们写完”hello world”这个字符串时,文件偏移量就到末尾了。这时,我们再想进行读取,就是从偏移量的位置(末尾)向后读取,所以我们啥也读不到。
举个例子2(文件偏移量的初始位置验证)
看以下一段代码:
结果:
我们发现,没有任何东西被打印出来,这是咋回事呢?这说明,当我们用追加操作a的方式打开文件时,文件偏移量在最末尾,所以我们读不到任何东西。
备注:读取r和写入w的打开方式,文件偏移量在最开头。
基本操作
①tell
tell()
功能:获取当前的文件偏移量,表示从开头位置,向后偏移了多少。
②seek
seek(offset[,whence])
功能:移动文件偏移量位置
参数:
offset代表相对于某个位置偏移量。可以是负数表示向前移动。
whence代表基准位置。默认值为 0,代表从文件开头算起;1代表从当前位置算起,2 代表从文件末尾算起。
举个例子1(tell()函数)
首先我们先看一下test文件中的数据:
看以下一段代码:
输出结果:
我们可以看到,test文件内有11个字节,我们的当前的文件偏移量为11,正好验证了我们之前说的【追加操作a的方式打开文件时,文件偏移量在最末尾】
举个例子2(tell()函数)
输出结果:
由结果可知,我们读俩字符,指针就向后走两位。
举个例子3(seek()函数)
我们先康一康下面这一段代码:
结果:
如果我想在第二次读取文件时,让它从头读取呢?
这时,我们可以通过人为调整偏移量,来实现:
结果:
完整代码:
fd = open('test','r+')#相对开头位置向后偏移了多少print("当前文件偏移量位置:",fd.tell()) #0print(fd.read(2))print("当前文件偏移量位置:",fd.tell()) #2#人为调整文件偏移fd.seek(0,0) #相对开头位置向后偏移0个字节print(fd.read(2))fd.close()
文件描述符
定义
系统中,每一个IO操作都会被分配一个整数作为编号,该整数即这个IO操作的文件描述符。文件描述符是不会重复的。
获取文件描述符
获取文件描述符函数fileno()
通过IO对象获取对应的文件描述符。
举个例子
代码和结果放一起:
如果觉得《网络编程(part5)--文件读写偏移量及文件描述符》对你有帮助,请点赞、收藏,并留下你的观点哦!