目录
x模式(控制文件操作模式)
x只写模式,不可读;不存在则创建,创建过了则报错
相当于判断文件是否存在
# with open('a.txt',mode='x',encoding='utf-8') as f:
# pass
with open('c.txt',mode='x',encoding='utf-8') as f:
f.read()
# io.UnsupportedOperation: not readable
with open('d.txt', mode='x', encoding='utf-8') as f:
f.write('哈哈哈\n')
# 指针移动的单为单位的位都是以bytes字节
# 只有一种特殊情况:
# t模式下的read(n),n代表的是字符个数
# with open("d.txt","r",encoding="utf-8") as f:
# res=f.read(4)
# print(res)#哈哈哈h
# f.seek(n,模式)
# n指的时移动的字节个数
# 模式:
# 0:参照物是文件开头位置
# f.seek(3,0)
# 1:参照物是当前指针所在位置
# f.seek(3,1)
# 2:参照物是文件末尾位置,应该倒着移动
# f.seek(-3,2)
# 强调只有0模式可以在t下使用,1,2必须在b模式下使用
# f.tell()获取指针当前位置
# 示范
with open("h.txt","rb")as f:
# f.seek(9,0)
# print(f.tell())
# f.seek(3,0)
# print(f.tell())
# print(f.read().decode())#从当前指针开始读取
# f.seek(9,1)
# print(f.tell())#9
# f.seek(3,1)#1模式是从当前指针往后读取
# print(f.tell())#12
f.seek(-3,2)
print(f.read().decode("utf-8"))#好
#一,读关的操作
# 1,readline 一次读一行
# with open("g","rt",encoding="utf-8") as f:
# res1=f.readline()
# res2=f.readline()
# print(res2)
# while True:
# line=f.readline() # 指定读的内容,每次读一行
# if len(line)==0:
# break
# print(line)
#
# 2,readlines
# with open("g","rt",encoding="utf-8") as f:
# res=f.readlines()
# print(res)
# 3,f.read与f.readlines()都是一次性将内容读入内存,如果内存太过多会造成内存溢出,若还想将内容全部读入内存可以
# 利用循环,for循环和while循环
# 二,写相关操作
# f.writelines()
# with open("h.txt","wt",encoding="utf-8") as f:
# l=["111\n","222","333"]
# res1=f.writelines(l) def writelines(self, lines: List[AnyStr]) ->
#f.write()
# with open("h.txt","wt",encoding="utf-8")as f:
# # f.write("111\n","222","333","444")
# # TypeError: TextIOWrapper.write() takes exactly one argument (4 given)
# f.write("111\n222\n333\n")
# 写入字符或者bytes()类型字节
# with open("h.txt","wb")as f:
# l=[
# "111aaa\n".encode("utf-8"),
# "222bbb".encode("utf-8"),
# "333ccc".encode("utf-8")
#
# ]
# 补充一下:如果存英文字符,可以直接加前缀b得到bytes类型
# l = [
# b"111aaa\n",
# b"222bbb",
# b"333ccc"
#
# ]
# 补充二:”上“.enconding("utf-8")等同于bytes("上",encoding="utf-8")
# l=[
# bytes("上啊",encoding="utf-8"),
# bytes("冲啊",encoding="utf-8"),
# bytes("小垃圾们",encoding="utf-8")
# ]
# f.writelines(l)
# 四,了解
# 1,f.flush()在w的模式下作用,把写入的数据立马从内从写入硬盘
# 操作系统是智能的,一点数据有时候不会立马写入硬盘,一般用于用于测试模式中
# with open("h.txt","wt",encoding="utf-8")as f:
# print(f.readable())
# print(f.writable())
# print(f.encoding)
# print(f.name)
# print(f.closed)
"""
False
True
utf-8
h.txt
False
"""