字符编码与文件处理
字符编码
1 以什么编码存的就要以什么编码取出 ps:内存固定使用unicode编码, 我们可以控制的编码是往硬盘存放或者基于网络传输选择编码 2 数据是最先产生于内存中,是unicode格式,要想传输需要转成bytes格式 #unicode----->encode(utf-8)------>bytes 拿到bytes,就可以往文件内存放或者基于网络传输 #bytes------>decode(gbk)------->unicode 3 python3中字符串被识别成unicode python3中的字符串encode得到bytes 4 了解 python2中的字符串就bytes python2中在字符串前加u,就是unicode
文件处理
文件处理流程 打开文件,得到文件句柄并赋值给一个变量------->通过句柄对文件进行操作------->关闭文件 读文件: f=open(r'aaaa.py','r',encoding='utf-8') print(f.readline(),end='') #读取一行, print(f.readlines()) #读取全部,不换行 print(f.readable()) #可读文件 print(f.writable()) #不可写文件 f.close() #结束之后必须关闭,否则占用内存 写文件: f=open('new.txt','w',encoding='utf-8') f.write('1111111111\n') #写入第一行 f.writelines(['2222\n','3333\n','4444\n']) #添加多行 print(f.writable()) #可写 f.close() 追加: f=open('new_2','a',encoding='utf-8') print(f.readable()) #不可读 print(f.writable()) #可写 f.write('888888\n') #追加单行 f.write('999999\n') f.writelines(['787878\n','878787\n']) #追加多行 f.close() #rb f=open('aaaa.py','rb') #以字节打开 print(f.read().decode('utf-8')) 拷贝图片 f=open('1.jpg','rb') #以rb的方式打开1.JPG data=f.read() #data获取读取到f的内容 print(data) f2=open('3.jpg','wb') #以写的方式打开 f2.write(data) #把data的内容写到f2 f2.close() f.close() #ab,以二进制的形式追加 f=open('new_3.txt','ab') f.write('aaaaa\n'.encode('utf-8')) 上下文管理 with open('aaaa.py','r',encoding='utf-8') as read_f,\ open('aaaa_new.py','w',encoding='utf-8') as write_f: data=read_f.read() write_f.write(data) 循环取文件每一行内容 with open('a.txt','r',encoding='utf-8') as f: while True: line=f.readline() if not line:break print(line,end='') lines=f.readlines() #只适用于小文件 print(lines) data=f.read() print(type(data)) for line in f: #推荐使用 print(line,end='') 文件的修改 方式一:只适用于小文件 import os with open('a.txt','r',encoding='utf-8') as read_f,\ open('a.txt.swap','w',encoding='utf-8') as write_f: data=read_f.read() write_f.write(data.replace('alex_SB','alex_BSB')) os.remove('a.txt') os.rename('a.txt.swap','a.txt') #方式二: import os with open('a.txt','r',encoding='utf-8') as read_f,\ open('a.txt.swap','w',encoding='utf-8') as write_f: for line in read_f: write_f.write(line.replace('alex_BSB','BB_alex_SB')) os.remove('a.txt') os.rename('a.txt.swap','a.txt')
打开文件的模式有:
r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】 w,只写模式【不可读;不存在则创建;存在则清空内容】 x, 只写模式【不可读;不存在则创建,存在则报错】 a, 追加模式【可读; 不存在则创建;存在则只追加内容】 "+" 表示可以同时读写某个文件 r+, 读写【可读,可写】 w+,写读【可读,可写】 x+ ,写读【可读,可写】 a+, 写读【可读,可写】 "b"表示以字节的方式操作 rb 或 r+b wb 或 w+b xb 或 w+b ab 或 a+b 注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码
本文来自博客园,作者:一石数字欠我15w!!!,转载请注明原文链接:https://www.cnblogs.com/52-qq/p/7230712.html