# ### 文件操作 (+ 扩展模式)
"""
# (utf-8编码格式下 默认一个中文三个字节 一个英文或符号 占用一个字节)
    #read()        功能: 读取字符的个数(里面的参数代表字符个数)
    #seek()        功能: 调整指针的位置(里面的参数代表字节个数)
    #tell()        功能: 当前光标左侧所有的字节数(返回字节数)
"""
# (1)r+ 可读可写 (先读后写)
fp = open("0414_2.txt",mode="r+",encoding="utf-8")
res = fp.read()
print(res)
fp.write("ffzzz")

# 读取所有字符串
fp.seek(0)
res = fp.read()
print(res)
fp.close()


# (2)r+ 可读可写 (先写后读)
fp = open("0414_1.txt",mode="r+",encoding="utf-8")
# 先把光标移动到文件最后
fp.seek(0,2)
# 在最后追加abcd ,避免覆盖以前原有字符串
fp.write("abcd")
# 把光标移动到文件开头
fp.seek(0)
res = fp.read()
print(res)
fp.close()


# (3)w+ 可读可写 (默认光标在文件的开头)
fp = open("0414_3.txt",mode="w+",encoding="utf-8")
fp.write("今天天气下了雨")

# 可读
fp.seek(0)
res = fp.read()
print(res)
fp.close()

'''
除了r模式不能够自动创建文件之外,w和a都可以
'''
# (4)a+ append 可读可写 (默认光标在文件的结尾) (在写入的时候,只能在末尾强制追加)
fp = open("0414_4.txt",mode="a+",encoding="utf-8")
fp.write("今天晚上要早走")

fp.seek(0)
res = fp.read()
print(res)
fp.close()


# seek read tell
fp = open("0414_5.txt",mode="a+",encoding="utf-8")
# fp.write("123456789")

res = fp.tell() # 返回当前光标左边所有字符的字节
print(res)
fp.seek(4)       # 移动到第四个字节的位置
res = fp.tell()  # 返回当前光标左侧所有的字节数
print(res)

res = fp.read(2) # read可以在括号里面指定读几个[字符]
res = fp.tell()  # 获取当前光标左侧的字节数
print(res)
fp.close()


# 可以使用with 语法 简化操作  可以省去fp.close() 这句代码,实现自动关闭
# with + open(文件操作) as 为open的返回值起别名  fp 就是名称
# 相当于 fp = open() 一样的
with open("0404_6.txt",mode="a+",encoding="utf-8") as fp:
    fp.write("ceshidaima")
    fp.seek(0) # fp.seek(0,2) 移动到文件的末尾
    res= fp.read()
    print(res)
    # fp.close 这句话 with语法自动帮助我们完成


# 简化文件复制操作  open 之间 可以用逗号,隔开 为了简化操作
with open("集合.png",mode="rb") as fp1,open("集合3.png",mode="wb") as fp2:
    res = fp1.read()
    strvar  = fp2.write(res)