目录
open方法用来打开一个文件,并返回文件对象。。常用的两个参数:file 和 mode(模式)
默认为文本模式,如果要以二进制模式打开,加上 b 。
mode:
x 写入模式,新建一个文件,如果文件存在就会出现错误
R(开始时,会把光标移动到文本开头)
r 只读方式打开文件,文件的指针通常会放在文件的开头,这是默认模式(必须加上 encoding 参数)
注意: read(4) 是读取四个字符
with open("文件名","r",encoding=“utf-8”) as f: print(f.read()) #读取全部 print(f.read(4)) #读取前四个字符的内容 print(f.readline()) #读取一行 ,不过自带‘\n(换行)’ print(f.readlines()) #读取全部,并将其放在一个列表中。返回值类型是列表
rb :不可以加上 encoding 参数
注意: read(4) 是读取四个字节
with open("文件名","rb") as f: print(f.read()) #读取全部 print(f.read(4)) #读取前四个字节的内容 print(f.readline()) #读取一行 ,不过自带‘\n(换行)’ print(f.readlines()) #读取全部,并将其放在一个列表中。返回值类型是列表
r+ : 可读可写。格式同r
# 先写后读 with open("../day6/四大喜事.txt",mode="r+",encoding="utf-8") as f: f.write("我是仙女三") f.seek(0,0) print(f.read()) # 先读后写 with open("../day6/四大喜事.txt",mode="r+",encoding="utf-8") as f: print(f.read()) f.seek(0,0) f.write("我是仙女三")
W(开始时,会将文本内容清空)
w 打开一个文件用于写入,如果文件存在则打开文件,先清空内容再开始编辑,如果文件不存在,则创建新文件后写入。(必须加上 encoding 参数)
with open("文件名","w",encoding = "utf-8") as f: f.write("写入的内容")
wb: 不可以加上 encoding 参数,写入内容必须是字节码
with open("../day6/四大喜事.txt",mode="wb") as f: f.write("我是仙女三") #报错: TypeError: a bytes-like object is required, not 'str' # 以下是正确的: with open("../day6/四大喜事.txt",mode="wb") as f: f.write("我是仙女三".encode("gbk")) with open("../day6/四大喜事.txt",mode="rb") as f: print(f.read().decode("gbk"))
w+:先写后读。格式同w. 先读后写不会报错。但是不会输出内容。所以无意义。。
因为模式为w的 再打开文件之前第一步会把文件进行清空,在后再写。所以先读的话内容为空
with open("../day6/四大喜事.txt",mode="w+",encoding="utf-8") as f: f.write("我是仙女三") f.seek(0,0) print(f.read())
A (开始时,会把光标移动到文本末尾)
a 打开一个文件用于追加,如果文件存在则打开文件,文件指针通常在文本末尾,也就是说新文本会写在已有内容之后,如果文件不存在,创建文件后写入(必须加上 encoding 参数)
with open{("文件名",“a”,encoding = "utf-8") as f: f.write("写入的内容会追加到原来内容之后")
ab 不可以加上 encoding 参数,写入内容必须是字节码
with open("../day6/四大喜事.txt",mode="ab") as f: f.write("我是仙女三".encode("gbk")) with open("../day6/四大喜事.txt", mode="rb") as f: print((f.read()).decode("gbk"))
a+ (想要读取全部内容,必须要把光标移动到文本头)
with open("../day6/四大喜事.txt",mode="a+",encoding="utf-8") as f: f.write("我是仙女三") f.seek(0,0) print(f.tell()) print(f.read())
其他操作,关于光标的部分操作:
f = open("文件名称","r",encoding="utf-8")
f.tell() 返回光标当前位置
f.seek() : offset -- 开始的偏移量,也就是代表需要移动偏移的字节数 whence:可选,默认值为 0。给offset参数一个定义,表 示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起
f.seek(int num) : 将光标移动到 num的位置 (内容按字节去数)
f.seek(0,0) : 将光标移动到 文本头
f.seek(0,2) : 将光标移动到 文本末尾
f.seekable() : 判断光标是不是可寻找的,返回布尔值
f.readable() : 判断是否可读
f.writable() : 判断是否可写
f.truncate( ) :
参数为 num ,则将该位置的光标之后的内容全部删除
参数为空,则该方法前必须将光标移动,然后再将该位置的光标之后的内容全部删除
f.flush() : 刷新,防止出现没有写入的文件内容
f.close() : 关闭操作,如果不是使用 with open 格式,则需要手动关闭文件。需要使用此方法 。 同JAVA的文件关闭