文件处理流程
1.打开文件,得到文件句柄并赋值给一个变量
2.通过句柄对文件进行操作
3. 关闭文件
# r:文件读模式
f = open("undo", 'r', encoding="utf-8");
# 读取文件数据
data = f.read()
print(data)
# 关闭文件句柄
f.close()
# 判断文件是否可读
f.readable()
# 读取文件的一行
f.readline()
# 把文件中的内容放到列表中(每一行是一个元素)
f.readlines()
# 如果undo文件存在,会清空undo文件,然后再写
# 如果undo文件不存在,则会新建undo文件,再写
# 文件写模式
f = open("undow",'w', encoding="utf-8");
判断文件是否可写
f.writable()
# 将字符串写入文件
f.write("天下大事分久必合,合久必分\n")
f.write("东汉末年,黄巾起义\n")
# 将列表中的每个元素写入文件
f.writelines(['一壶浊酒喜相逢\n','初来还是座上客\n'])
# 关闭文件句柄
f.close()
# 追加的模式写入文件
f = open("undow",'a', encoding="utf-8");
f.write("古今多少事,\n");
f.write("都付笑谈中\n");
f.close()
# 使用 with..as 关键字,打开文件,会自动关闭文件句柄(f.close())
with open("undow", "r", encoding="utf-8") as f:
data = f.read()
print(data)
'b'表示以字节方式操作
rb 或 r+b
wb 或 w+b
ab 或 a+b
以字节方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码.
8个二进制位(bits)是一个字节(byte) 1G = 1024M, 1M = 1024K, 1K = 1024Bytes 1bytes = 8bits
with open("undow2", "rb") as f:
# 将读取到的二进制数据,解码成字符串,然后打印
print(f.read().decode())
with open("undow2", "wb") as f:
# 先将字符串编码成二进制,然后把二进制保存到硬盘
f.write("tianxia\n天下".encode())
with open("undow2", "ab") as f:
# 先将字符串编码成二进制,然后把二进制保存到硬盘
f.write("tianxia\n天下".encode())
# 查看文件是否是关闭状态
f.closed
# 将内存中数据刷到硬盘
f.flush()
# 光标在文件内的移动: read(6),代表读取6个字符. 其他方法的光标移动都是以字节为单位,如seek,tell,truncate方法
# 查询光标的位置
v = f.tell()
# 移动光标到指定位置
f.seek(10)
# 截取文件, 截取的文件必须要用 r+, a+方式打开
# 不要用w+方式,w+方式打开,会直接覆盖文件,那么再调用truncate(),则没有意义了
f.truncate(4)
# 从文件最后,定位光标
f = open("undow2", 'rb')
offset = -6
while True:
# seek方法第2个参数是2,表示从文件最后,定位光标
f.seek(offset, 2)
data = f.readlines()
if len(data) > 1:
print("最后一行数据是:%s" % (data[-1].decode("utf-8")))
break
offset = offset * 2