一、文件操作b模式
1、
1 # f = open('test11.py','rb',encoding='utf-8') # 这种情况会报错 2 f = open('test11.py','rb') # b 模式不能指定编码方式 3 data = f.read() 4 print('直接打印出来:',data) 5 print('解码打印 ',data.decode('utf-8')) 6 f.close()
1 直接打印出来: b'11111 22222 3333 ' 2 解码打印 3 11111 4 22222 5 3333
总结:字符串 -------encoding ------->> bytes
bytes --------decode --------->> 字符串
例2
1 f = open('test22.py','wb') 2 f.write(bytes('99999 ',encoding='utf-8')) 3 f.write('北京'.encode('utf-8')) 4 f.close() 5 6 f1 = open('test22.py','br') 7 data = f1.read() 8 print('原码打印',data) 9 print('解码打印 ',data.decode('utf-8')) 10 f1.close()
1 原码打印 b'99999 xe5x8cx97xe4xbaxac' 2 解码打印 3 99999 4 北京
注:原码打印和解码打印的区别,写文件前,即在打开的时候不能指定编码格式。只有在写的时候才指定编码格式。
二、文件操作
1、
1 f = open('练习.txt',"r+",encoding='utf-8') 2 print(f.read()) 3 f.write('1234556789 ') 4 print(f.read()) 5 f.close()
1 1234556789
2、closed,encoding, flush(),readlinse() 的使用
1 f = open('练习.txt',"r+",encoding='utf-8',newline='') 2 print(f.closed) # closed 判断文件是否关闭 3 print(f.encoding) # 检查是哪种编码格式 4 f.flush() # 写完内容后是暂时存在了缓存里面,通过flush()函数冲刷一下,就将内容保存在了内存、# f.flush() #讲文件内容从内存刷到硬盘 5 print(f.readlines()) #将所有内容以列表形式打印出来,
1 False 2 utf-8 3 [' ', '1234556789 ', '1234556789 ']
3、tell的使用,打印当前所在位置
1 f = open('练习.txt',"r+",encoding='utf-8',newline='') 2 print(f.tell()) 3 print(f.readline()) # 因为12345 后还有 ,没有显示出来 4 print(f.tell())
4、seek的使用,(是以字节为单位的)
1 f = open('练习.txt',"r+",encoding='utf-8',newline='') 2 f.write('my name is cainiao who is from earth') 3 f.close() 4 5 f1 = open('练习.txt','r+',encoding='utf-8') 6 print(f1.read()) 7 8 f1.seek(3,0) #“0”代表从文件开头开始偏移,偏移3个单位 9 print(f1.tell()) 10 print(f1.read(3)) 11 print(f1.read(6)) #从偏移之后的指针所指的位置,开始读取6个字符 12 print(f1.tell()) 13 14 print(f1.readline()) 15 # print('看看是否到了最后:',f1.read(5)) 16 17 print(f1.seek(5,0)) 18 print(f1.seek(3,1)) 19 print(f1.seek(0,2)) #“2”代表从末尾算起,“0”代表偏移0个单位
1 nam 2 print(f1.seek(3,1)) 3 e is c 4 io.UnsupportedOperation: can't do nonzero cur-relative seeks 5 12 6 ainiao who is from earth 7 5
5、读取大文件中最后一行
1 f=open('练习.txt','rb') 2 for i in f: 3 offs=-10 4 while True: 5 f.seek(offs,2) 6 data=f.readlines() 7 if len(data) > 1: 8 print('文件的最后一行是%s' %(data[-1].decode('utf-8'))) 9 break 10 offs*=2