文件指针在开头,默认替换了原字节的内容,不能默认创建新的文件
with open("lianxi3.txt",mode="r+",encoding="utf-8") as fp:
fp.seek(0,2) # 移动光标到文件最后
fp.write("xyz") # 先写
fp.seek(0) # 移动光标到文件开头
res = fp.read() # 后读
print(res)
w+ 可读可写
清空重写;
w模式,每次都要清空重写数据,文件指针默认在开头
若不存在该文件,直接创建新文件
with open("lianxi4.txt",mode="w+",encoding="utf-8") as fp:
fp.write("bcd")
fp.seek(0) # 移动光标到开头
res = fp.read()
print(res)
a+ 可读可写
a模式,强制文件指针在末尾
若不存在该文件,直接创建新文件
with open("lianxi5.txt",mode="a+",encoding="utf-8") as fp:
fp.write("abc")
fp.seek(0)
print(fp.read())
区分一下r+ 和 a+\
r+模式 文件指针默认开头,写入内容不会强制文件光标所在的位置去写
a+模式 强制把文件指针放到文件末尾,写入内容时会强制重新把内容放到最后
with open("lianxi6.txt",mode="r+",encoding="utf-8") as fp:
fp.seek(3)
fp.write("qqq")
with open("lianxi6.txt",mode="a+",encoding="utf-8") as fp:
fp.seek(3)
fp.write("qqq")
read tell seek 相关方法的使用
在读的时候a+的文件指针不强制,写的时候强制
with open("lianxi6.txt",mode="a+",encoding="utf-8") as fp:
fp.seek(3) # 移动光标到第三个字节
res = fp.read(3) # 读取3个字符
print(res)
res = fp.tell() # 计算当前光标左侧所有内容的字节大小
print(res)
注意点 seek移动时出现的问题
不要随便使用seek移来移去,有可能移动到中文字节当中,出现无效的开始字节error
with open("lianxi7.txt",mode="a+",encoding="utf-8") as fp:
fp.seek(5)
res = fp.read()
print(res)
\xe6\x88\x91\xe7\x88 \xb1
print("我爱".encode())
b'\xe6\x88\x91\xe7\x88\xb1'