Python读写文件:"r","r+","w","a","w+","a+"等各模式和seek()函数详解

python读写文件的一般流程如下:

file2=open("D:/test.txt","w")

file2.write("s3")

file2.close()

Python读写文件须调用函数open,其中有一参数为模式参数,有下表中的情况。

只写模式 w 无文件则自动创建,写时全覆盖已有内容
只读模式 r 读已有文件,否则报错
追加模式 a (初始指针位置为末尾)在已有内容上追加新内容,不覆盖
写plus模式 w+ 可读可写,无文件则自动创建,写时全覆盖
读plus模式 r+ 可读可写已有文件,写时半覆盖

注意点一:指针

python读写文件时涉及到一个指针,对我们来说,这个指针之后的内容,我们可以触碰。在读写文件中的每个字符时,就像是在读写一个数组中的每个元素一样。

在以读文件(无论是只读还是读plus)打开文件时这个指针初始化在文件的最开头,之后进行读(read()或者readline()等)操作,读到何处这个指针就停到何处,read()或者readline()返回这个指针历经的所有内容,这个返回值我们一般用变量负责接收,若是只读模式此时已无所事事,该结束(close())此次线程了。但如果是读plus,并且有继续写操作的意图,要注意此时指针的位置,读写的指针是统一的,也就是说他们共用。
当指针到达文件末尾时,此时的写,可以说就是追加内容,此时的读,已经读到末尾的原因,读不到内容了已经,内容为空。

注意点二:覆盖方式

覆盖,我把它分为两种,半覆盖和全覆盖。 全覆盖,顾名思义,此文件的所有内容删除后再进行增添。 半覆盖,是指新内容的每个字符,对应覆盖原内容相应位置的字符。 例如:

文件原有内容:zxcv123
之后以下操作:
【1】全覆盖:

file2=open("D:/test.txt","w")#或者“w+”模式

file2.write("s3")

file2.close()

现在内容:s3

【2】 半覆盖:

file2=open("D:/test.txt","r+")

file2.write("s3")

file2.close()

现在内容:s3cv123

seek()函数

python提供移动指针位置的函数:seek(self:file,arg1:int,arg2:int)
第一个参数为相对参数二的位置,右边第x个位置为+x,左边第y个位置为-y,第二个参数为参考点。
参考点有三种参数:0文件开头,1当前位置,2文件末尾


file1=open("D:/test.txt","r+")
#此时位置在文件开头:0
file1.seek(0,2)
#移动至文件末尾
file1.write("x")
#追加x

当 第一个参数 值非 0 时,Python 要求文件必须要以二进制格式打开,否则会抛出 io.UnsupportedOperation 错误。

file1=open("D:/test.txt","rb")


print(file1.tell())#指针位置0
file1.seek(3,1)#相对当前位置向右移动3
print(file1.tell())#指针位置3
file1.seek(-1,1)#相对当前向右移动-1
print(file1.tell())#指针位置2
发布了13 篇原创文章 · 获赞 18 · 访问量 806

猜你喜欢

转载自blog.csdn.net/qzonelaji/article/details/104080069