十四、python沉淀之路--文件操作

一、文件操作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
原文地址:https://www.cnblogs.com/jianguo221/p/8976457.html