零基础 学 python开发 (Genius套餐A) 三十五

版权声明:Genius https://blog.csdn.net/weixin_41987706/article/details/90178454

夜光序言:

 

 

爱,有的时候并不是一定能得到回报,如果仅仅是为了回报去爱,那并不是爱。爱是不后悔,爱是付出,爱是看着爱人的微笑而微笑,我想要的爱就是这样

 

 

 

 

 

 

正文:

6.4 文件指针 
 
6.4.1 目标 


文件被打开后即可以执行写操作也可以进行读操作,从什么地方开始读写是可以控制的,这要求文件以读写的方式打开,同时使用一个文件指针指向文件字节流的位置,调整指针的位置就可以进行任意位置的读写了。教学目标就是掌握文件的这种随意的读写方法。

 



6.4.2 文件指针 


在程序看来,文件就是由一连串的字节组成的字节流,文件的每个字节都有一个位置编号,一个有 n 个字节的文件字节编号依次为 0、1、2、……、n-1 号,在第 n 字节的后面有一个文件结束标志 EOF (End Of File),如图 6-4-1 为文件的模型,其中标明了文件字节值,文件位置编号以及文件指针的关系,该文件有 6 个字节,它们是 0x41、0x42、0x43、0x41、0x42、0x61,指针目前指向第 2 字节,EOF 是文件尾。


图 6-4-1 读写文件模型



文件的操作就是打开这样一个文件流,对各个字节进行读写操作,操作完后关闭这个流,保存到磁盘。文件操作有下列三个基本步骤:
(1) 打开文件:就是从磁盘中读取文件到内存中,获取一个文件字节流。
(2) 读写文件:就是修改或增长文件的这个字节流。
(3) 关闭文件:就是把内存中的字节流写到磁盘中,以文件的形式保存。


文件是一个字节流,读写哪个字节必须要指定这个字节的位置,这是由文件指针来决定的。如字节流有 n 个字节,p 是指针的位置(0<=p<=n-1),那么读写的规则如下:

(1) 0<=p<=n-1 时,指针指向一个文件字节,可以读出该字节,读完后指针会自动指向下一个字节,既 p 会自动加 1;若 p 指向 EOF 的位置,则不能读出任何文件字节,EOF 通常是循环读文件的循环结束条件。
(2) 0<=p<=n-1 时,指针指向一个文件字节,可以写入一个新的字节,新的字节将覆盖旧的字节,之后指针会自动指向下一个字节,既 p 会自动加 1;若 p 指向 EOF 的位置,则新写入的字节会变成第 n+1 个字节,EOF 向后移动一个位置,在字节流的末尾写入会加长文件字节流。



6.4.3 指针操作 


Python 使用 tell 函数获取当前文件指针的位置,方法是:
文件对象.tell() 它返回一个整数。



例 6-4-1:文件指针 


 fobj = open("c:\\abc.txt", "wt")
 print(fobj.tell())
 fobj.write("abc")
 print(fobj.tell())
 fobj.write("我们")
 print(fobj.tell())
 fobj.close()
程序结果:
0
3
7
abc 我们

由此可见程序打开时文件指针指向 0 的开始位置,写"abc"后指针位置变成 3,写"我们"后后指针位置变成 7(因为又写了 4 个字节)。
Python 中使用 feek 函数来移动文件指针,方法是:文件对象.seek(offset[,whence]) 
offset -- 开始的偏移量,也就是代表需要移动偏移的字节数
whence:可选,默认值为 0。给 offset 参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1 代表从当前位置开始算起,2 代表从文件末尾算起。

在前面讲的文本文件打开模式中我们不能移动文件指针,如果在打开方式后面附加"+"号,那么这样的文件就是可以移动文件指针的,打开模式如下~~。
 
文件使用方式 
rt+
读写方式打开一个文本文件,允许读也允许写数据。如文件存在,则打开后文件指针在开始位置;如文件不存在,则打开失败。
wt+
读写方式打开一个文本文件,允许读也允许写数据。如文件不存在,则就创建该文件;如文件存在,则打开后清空文件内容,文件指针指向 0 的开始位置。
at+
读写方式打开一个文本文件,允许读也允许写数据。如文件不存在,则就创建该文件;如文件存在,则打开后不清空文件内容,文件指针指向文件的末尾位置。



例 6-4-2:读写文件 

def writeFile():
 fobj = open("c:\\abc.txt", "wt+")
 print(fobj.tell())
 fobj.write("123")
 print(fobj.tell())
 fobj.seek(2,0)
 print(fobj.tell())
 fobj.write("abc")
 print(fobj.tell())
 fobj.close()
def readFile():
 fobj = open("c:\\abc.txt", "rt+")
 rows=fobj.read()
 print(rows)
 fobj.close()
try:
 writeFile()
 readFile()
except Exception as err:
 print(err)


结果:
0
3
2
5
12abc



程序先用"wt+"打开文件,文件指针在 0 的位置,写"123"后文件指针在 3 的位置,fobj.seek(0,2)后文件指针在2的位置,写"abc"时从位置2开始写,因此"a"会覆盖原来的"3",写完后结果"12abc",文件指针在 5 的位置。



6.4.2 【案例】调整文件指针读写文件 


1、案例描述 
使用文件指针随意读写文件。 
 
2、案例分析 
文件如果按"wt+"或者"rt+"的模式打开,那么文件指针可以随意调整,可以随意对文件
进行读写。
 
3、案例代码 

def writeFile():
 fobj = open("c:\\abc.txt", "wt+")
 print(fobj.tell())
 fobj.write("123")
 print(fobj.tell())
 fobj.seek(2,0)
 print(fobj.tell())
 fobj.write("abc")
 print(fobj.tell())
 fobj.close()
def readFile():
 fobj = open("c:\\abc.txt", "rt+")
 fobj.write("我们")
 fobj.seek(0,0)
 rows=fobj.read()
 print(rows)
 fobj.close()
try:
 writeFile()
 readFile()
except Exception as err:
 print(err)


程序结果:
0
3
2
5
我们 c
程序在 writeFile 中写入"12abc"后,在 readFile 再次写成"我们",覆盖"123a"的 4 个字节,因此结果为"我们 c",这就是文件abc.txt 的最后结果

猜你喜欢

转载自blog.csdn.net/weixin_41987706/article/details/90178454