文件的操作
w = open('1.txt', 'w', encoding='utf--8') w.write('000 ') #在写入大量数据,要及时处理内存空间,不然内存可能溢出导致数据丢失 #flush:1.将内存中的数据刷新到硬盘中;2.释放文件资源 w.flush() w.write('111 ') # 最后一次flush()操作可省略 w.flush() # 一次输入多行 w.writelines(['asd ', 'aeqwead ']) w.close() with open('文件', '模式', encoding='utf-8') as f: # 操作 pass newlines # 读取一个字节,如果是行/文件等结束标识,就返回值,否则返回None
文件的操作模式
''' r : 读 w : 写(无创建,有清空) a : 追加(有创建功能) t : 文本操作(默认模式) b : 非文本文件必须采用二进制模式 + :可读可写 r+ : 不创建文件的可读可写 | w+:创建清空文件的可读可写 | a+"创建不清空文件(追加)的可读可写 rb : 二进制读 | wb 创建清空文件的二进制写 | ab :创建不清空文件(追加)的二进制写 rb+ | wb+ | ab+ x :创建文件,如果文件已存在就抛异常 U :已被抛弃不用 ''' # with open 语法进行文件复制(边读边写赋值) # 复制文本类文件 with open('source.txt', 'rt', 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(r'source.mps','rb') as f1, open(r'target.mp4','wb+') as f2: # rb+/wb/wb+/ab/ab+ for line in f1: f2.write(line)
文件游标操作
# 游标 必须在b模式下操作,seek中偏移的是字节 ''' 1.如何使用游标:游标的相关方法 2.游标相关的读写操作 3.根据游标在大文件中取出多个指定位置的部分字节内容 ''' # 游标读: # 方法: seek(偏移量,偏移位置) # 偏移量:移动的字节数 # 偏移位置:0 - 从文件开始位置开始偏移 | 1 - 从当前游标位置开始偏移 | 2 - 从文件末尾开始偏移 with open('source.txt','rt',encoding='utf-8') as f: d1 = f.read() print(d1) #打印游标当前位置 print(f.tell()) # 游标操作:从头开始 f.seek(0,0) d2 = f.read() print(d2) # 游标操作:从当前位置开始 f.seek(3,1) d3 = f.read() print(d3) # 游标操作:从末尾开始 f.seek(-5,2) d4 = f.read() print(d4) # 游标写:(会覆盖书写) with open('source.txt','rb+') as f: f.seek(11) f.write(b'0000') # 写入的内容必须是b字符串,会覆盖后面的内容 # 文件秒传 # 在大文件中,开头 | 1/3 | 2/3 | 末尾 各取10个字节拼接成秒传的信息依据 tagdata = b'' with open(r'001.png', 'rb') as f: data = f.read() length = len(data) # 开头 f.seek(10, 0) d1 = f.read(10) # 1/3 f.seek(length // 3, 0) d2 = f.read(10) # 2/3 f.seek(length // 2 * 3,0) d3 = f.read(10) # 末尾 f.seek(-10,2) d4 =f.read(10) tagdata = d1+d2+d3+d4 newdata = b'' with open(r'002.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) newdata += f.read(10) f.seek(-10,2) newdata +=f.read(10) if newdata == tagdata: print('秒传成功') else: print('慢慢传去吧!')