Unicode 万国码,

  1. 支持所有国家的语言
  2. 跟所有国家的编码有映射关系
  3. 2-4个字符来存一个字符,比ASII编码,要多一倍

为了优化Unicode的占空间问题:

        utf-8 :英文占1字节,西欧占2, 中文占3个

存在文件里,或者网络发送,用utf-8,但内存里依然是Unicode,这是py3的特点;

在py2里,内存里的字符,默认是ASCII;

mac/Linux 默认编码是utf-8;

Windows中国版,默认是gbk;

gbk-----> utf-8 的方法:

  1. 直接转成Unicode
  2. 转成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写一条强制刷到硬盘里。