Python 文件的扩展模式

文件的扩展模式 ( + , b )

w => write  写
r => read   读
a => append 追加[写]

扩展模式本身是弥补没有的那个功能[无非就是读和写]
w => w w+ wb wb+
r => r r+ rb rb+
a => a a+ ab ab+
(utf-8编码格式下 默认一个中文三个字节 一个英文或符号 占用一个字节)
read()		功能: 读取字符的个数(里面的参数代表字符个数)
seek()		功能: 调整指针的位置(里面的参数代表字节个数)
seek(0,0)   功能: 移动到文件开头  第二个值代表的是模式 0=> 从左向右数 简写 seek(0)
seek(0,2)   功能: 移动到文件末尾  第二个值代表的是模式 2=> 从右向左数

  • tell() 功能: 当前光标左侧所有的字节数(返回字节数)
  • r+ 先读后写

    文件指针强制放到文件开头
    fp = open("lianxi3.txt",mode="r+",encoding="utf-8")
    res = fp.read()                            # 先读
    fp.write("456")                            # 后写
    fp.seek(0)                                 # 移动光标
    res = fp.read()                            # 在读
    print(res)
    
    fp.close()
    
  • r+ 先写后读

    文件指针在开头,默认替换了原字节的内容,不能默认创建新的文件
    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'
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值