with open('文件', '模式', encoding='utf-8') as f:
# 操作 pass# temp.txt
# 111222333with open('temp.txt', 'a', encoding='utf-8') as f:
f.write('new msg')# 结果:111222333new msg# 文本类型文件的复制
r = open('source.txt', 'r', encoding='utf-8')w = open('target.txt', 'w', encoding='utf-8')for line in r: # 遍历就是一行一行读 取读文件的流 w.write(line) w.flush() # 将写入到内存中的数据刷新到硬盘中w.close()r.close()# 用with open语法如何处理?
# r+: 不会创建文件的可读可写 | w+:创建清空文件的可读可写 | a+:创建不清空文件(追加)的可读可写with open('source.txt', 'r', encoding='utf-8') as f1: with open('target.txt', 'a+', encoding='utf-8') as f2: for line in f1: f2.write(line) # 如果复制非文本类型的数据文件?# 从模式采用b模式,不需要关心编码问题with open('source.mp4', 'rb') as f1: with open('target.mp4', 'wb+') as f2: # rb+ | wb | wb+ | ab | ab+ for line in f1: f2.write(line)'''
r: 读w: 写(无创建,有清空)a: 追加(有创建的功能)t: 文本操作(默认模式) r=>rt w=>wt a=>at
b: 非文本文件必须采用二进制模式来处理+: 可读可写r+: 不会创建文件的可读可写 | w+:创建清空文件的可读可写 | a+:创建不清空文件(追加)的可读可写
rb: 二进制读 | wb:创建清空文件的二进制写 | ab: 创建不清空文件(追加)的二进制写rb+ | wb+ | ab+''''''
百度网盘 - 秒传''''''1. 如何使用游标:游标的相关方法2. 游标相关的读写操作3. 根据游标在大文件中取出多个指定位置的部分字节内容''''''
seek(偏移量, 偏移位置)偏移位置:0 -- 文件开头1 -- 当前位置2 -- 文件末尾'''# 游标读
with open('source.txt', 'rb') as f: d1 = f.read(11) print(d1) # print(d1.decode('utf-8'))# 当前游标的位置
print(f.tell())# 游标操作 - 从末尾位置开始
f.seek(-3, 2) d2 = f.read() print(d2.decode('utf-8')) # 890# # 游标操作 - 从当前位置开始
# f.seek(-3, 1) # d2 = f.read() # print(d2.decode('utf-8')) # 34567890# # 游标操作 - 从头开始
# f.seek(3, 0) # d2 = f.read() # # print(d2) # print(d2.decode('utf-8')) # 好1234567890# 游标写:会覆盖书写
with open('source.txt', 'rb+') as f: f.seek(11) # print(f.read()) f.write(b'000')print("-------------------------------------")
# 案例with open('001.png', 'rb') as f: data = f.read() print(len(data))# 在大文件中,开头| 1/3 | 2/3 | 末尾 各取10个字节拼接成秒传的信息依据
# 形成秒传规则tagData = b''with open('001.png', 'rb') as f: # 通过其他途径(sys模块)来获取文件总大小 data = f.read() length = len(data) # 开头 f.seek(0, 0) d1 = f.read(10) # 1/3 f.seek(length // 3, 0) d2 = f.read(10) # 2/3 f.seek(length // 3 * 2, 0) d3 = f.read(10) # 末尾 f.seek(-10, 2) d4 = f.read(10) tagData = d1 + d2 + d3 + d4# 秒传依据 print(tagData)newData = b""
with open('001.png', 'rb') as f: data = f.read() length = len(data) f.seek(0, 0) newData += f.read(10) f.seek(length // 3, 0) newData += f.read(10) f.seek(length // 3 * 2, 0) newData += f.read(10) f.seek(-10, 2) newData += f.read(10)if newData == tagData:
print('秒传成功')else: print('慢慢传去吧')