Unicode 万国码,
- 支持所有国家的语言
- 跟所有国家的编码有映射关系
- 2-4个字符来存一个字符,比ASII编码,要多一倍
为了优化Unicode的占空间问题:
utf-8 :英文占1字节,西欧占2, 中文占3个
存在文件里,或者网络发送,用utf-8,但内存里依然是Unicode,这是py3的特点;
在py2里,内存里的字符,默认是ASCII;
mac/Linux 默认编码是utf-8;
Windows中国版,默认是gbk;
gbk-----> utf-8 的方法:
- 直接转成Unicode
- 转成utf-8
unicode 转任意编码都叫编码,任意编码转Unicode都叫解码.。可以用decode解码eg: b = a.decode(''gbk")。
Unicode通过encode编码转utf-8.
s.decode("gbk").encode
b开头的字节类型------>就是一个二进制,用十六进制显示,会比较容易计算。一个十六进制占4位,两个就是8位,为一个字节。
文件操作:
文件操作流程:
word流程:找到文件,双击打开--->读或修改--->保存&关闭;
用Python操作文件也差不多:
f=open("filename", mode="w") #打开文件
f.write('学习笔记') #写操作
f.read() #读操作
f.close() #保存并关闭
f.readline() #读一行
与手工操作不同的是,word文档打开就既可以读又可以写,Python只能以读,创建,追加三种模式中的任意一种方式打开文件。不能即写又读。
文件打开模式(mode=):
r :只读模式;
w:创建模式,若文件已存在,则覆盖旧文件;
a: 追加模式,新数据会写到文件末尾。
文件遍历:
循环文件,
f = open("filename")
for line in f: #每次循环一行
line = line.split() #把每一行分成一个小列表
print(line,end="") #可以去掉print后面自带的那个换行符
height = int(line[3]) #取值并转为int类型
weight = int(line[4])
if height >= 170 and weight <=50:
print(line)
用二进制模式操作文件(音频,图片):
用二进制模式打开文件:
1.rb :二进制只读模式
2.wb :二进制创建模式,若文件已存在,则覆盖旧文件
3.ab :二进制追加模式,新数据会写到文件末尾
这样,读出来的数据就是bytes字节类型了,当然写进去的也必须是bytes类型。
f = open("123.jpg","rb") #打开文件
for line in f:
print(line)
#encoding = None #告诉你的解释器,当前要打开的文件是什么编码,如果是None,则用解释器默认编码utf-8
#二进制写
f = open("456","wb")
s = "笔记"
f.write(s.encode("utf-8")) #以二进制的方式写,并不代表写出来的是二进制。
当需要读写类似gbk的文件则需要指定encoding。
操作文件的其他功能:
seek:把操作文件的光标移到指定位置,定义位置的时候按照字节来定义,utf-8编码一个中文占3个字节,gbk编码一个中文占2个字节。用seek定义到指定位置进行写的操作的时候回覆盖后面相应的值。
tell: 返回光标当前的位置。
flush:把文件从buffer(在内存里有一个单独的小空间叫缓存,写操作是把数据先写到缓存内,当装满之后会一次性的刷到硬盘里,为解决内存和硬盘之间速度不一致的解决方案)里强制刷新到硬盘里。
缓存是断电即消失的。所以在数据很重要的情况下,就可以用flush写一条强制刷到硬盘里。