文件I\O操作二
一、文件高级及函数基本使用
X模式(了解)(只写模式;不可读;不存在创建,存在则报错)
b模式:
b模式:1.读写都是以bytes格式 2.可以针对所有文件 3.一定不能指定字符编码,(即一定不能指定encoding参数) with open(r'C:\Users\WYC\Desktop\微信图片_20210105145847.jpg',mode='rb') as f: f.read() # 硬盘二进制存入内存,在b 模式下,不做任何改变,是什么样的读出来的就是什么样 with open(r'a.txt',mode='wb') as f: f.write('你好,world'.encode('utf-8'))
#循环读取文件 #方式一:自己控制每次循环的读取量 with open(r'IMG_1279.PNG',mode='rb') as f: while True: res = f.read(1024) # 以1024个字节读取文件 if len(res)==0: break print(len(res)) # 方式二:以行为单位读取,当一航文件内容过大时,内存会过载 with open(r'IMG_1279.PNG',mode='rb') as f1: for line in f1: print(len(line),line)
二、其他操作方法
读相关操作 # 内容过大时,容易导致内存溢出 with open(r'a.txt',mode='rt',encoding='utf-8') as f: # res=f.readline() # 一次只读一行 # print(res) # res1=f.readlines() # 多行一起读,生成一个列表, # print(res1) #写相关操作 with open(r'a.txt',mode='wt',encoding='utf-8') as f: # l=['123\n','234\n','14314\n'] # 如果是纯英文,可以直接加前缀b得到bytes类型 # l=[b'123', # b'234', # b'14314'] # 如果有其他字符 l = [ bytes('你好',encoding='utf-8'), bytes('中国',encoding='utf-8'), ] f.writelines(str(l)) # 相当于一个列表 控制文件指针操作: 指针移动的单位都是以bytes/字节为单位 只有一种特殊情况:t模式下的read(n),是以字符为单位移动的(n)代表字符个数 f.seek(): f.seek(n,模式:n指的是移动的字节个数 模式: 0 参照物是文件的开头位置(只有0模式可以在t模式下使用); 1 参照物是当前位置; 2 参照物是文件末尾位置,移动时需要倒着移动 f.tell # 告诉你指针当前位置