昨天遗留了个小问题“open()函数的“w+”模式下可以调用read方法。但是运行结果是空白,是怎么回事呢?”
这是因为使用write()方法后,文件指针会停留在文本尾末,我们需要把指针移动到文本的开头,再读取。这就要用到seek()方法,用于移动文件指针到指定位置。把昨天的程序加入seek()方法看一下。
上面用到了seek()方法,它的语法格式如下:
语法:file.seek(offset,[whence])。有两个参数
offset:开始的偏移量,即偏移的字节数。中文一个字符是3个字节。
whence:默认值为0,表示要从哪个位置开始偏移。0代表从文件开头开始算起;1代表从当前位置开始算起;2代表从文件末尾算起。查资料说whence=1和whence=2只能在二进制模式下使用。没有学习二进制的内容,只对默认值为0的参数做验证。
学到这里,我很好奇怎么知道文件指针到底在什么位置呢?用什么方法查看指针偏移到指定位置了吗?
百度了一下,使用tell()方法可以获取文件指针的当前位置,它的语法格式file.tell()。
下面就用seek()方法移动文件指针,再用tell()方法获取当前指针的位置吧。
1.1使用open函数的“w+”创建num_3.txt,并写入“文件指针到底在哪里”。用tell()方法获取创建文件后及写入内容后,文件指针分别在什么位置。
由上图可以看出,创建文件后,文件指针位置为0,表示指针在文件开头;写入内容后指针位置为27(这句话27个字节),表示在指针文件的末尾。
1.2沿用1.1的例子,使用seek()方法移动指针位置,把whence参数为默认值0。
然后用read()方法读取指针偏移后的内容。
从上图可以看出让指针偏移到0的时候,就是指针移动到开头,可以读取整个文本。指针偏移到3的时候从第二个字符开始读取文本。
1.3继续沿用1.1的例子,现在把指针偏移数设置为不是3的倍数会怎么样呢?
从上面的例子可以看出,指针偏移数不是3的倍数也能获取指标位置,但读取时会出错,告诉是无效字节。也对呀,总不能把汉字批成几瓣来显示吧。
今天就学习到这吧,本来是要学习read()函数的,结果光文件指针就学习了这么长的时间。