字符编码
# x='你好' # res=x.encode('utf-8') encode编码---unicode转成其他编码 # print(res,type(res)) # # print(res.decode('gbk')) decode -----其他编码解码成unicode
文件打开模式之b模式
b---字节(bytes)
强调:
1,与t模式类似不能单独使用,必须是rb,wb,ab
2,b模式下读写都是以bytes为单位的
3,b模式下一定不能指定encoding参数
rb模式
# with open('1.jpg',mode='rb',) as f: # data=f.read() # print(data,) # print(type(data)) # with open('db.txt',mode='rb',) as f: # data=f.read() # # print(data.decode('utf-8')) #bytes-----unicode # print(type(data))
wb模式
# with open('b.txt',mode='rb') as f: # data=f.read() # print(data.decode('utf-8')) # with open('1.jpg',mode='rb') as f: # data=f.read() # print(type(data)) # print(data.decode('utf-8'))
ab模式
# with open('b.txt',mode='ab') as f: # f.write('你好'.encode('utf-8'))
文件打开模式补充
可读可写
#r+t with open('b.txt','r+t',encoding='utf-8') as f: # print(f.readable()) # print(f.writable()) print(f.readline())
"+" 表示可以同时读写某个文件 r+, 读写【可读,可写】 w+,写读【可读,可写】 a+, 写读【可读,可写】
文件的修改
f.seek()
字节表示几个字符,由文件的字符编码决定
# with open('user.txt','r+',encoding='utf-8') as f: # f.seek(9) #偏移量的单位是字节
#修改文件方式一:
#1、先把文件内容全部读入内存
#2、然后在内存中完成修改
#3、再把修改后的结果覆盖写入原文件
#缺点:会在文件内容过大的情况下,占用过多的内存
# with open('user.txt',mode='r',encoding='utf-8') as f: # data=f.read() # data=data.replace('wxx','alex') # # with open('user.txt',mode='w',encoding='utf-8') as f: # f.write(data)
#修改文件方式二:
#1、以读的方式打开原文件,以写的方式打开一个新文件
import os with open('user.txt',mode='rt',encoding='utf-8') as read_f, open('user.txt.swap',mode='wt',encoding='utf-8') as write_f: for line in read_f: if 'wxx' in line: line=line.replace('wxx','alex') write_f.write(line) os.remove('user.txt') os.rename('user.txt.swap','user.txt')
循环读取文件的内容:
f = open('a.txt') for i in f(): print(i,end='')