day07----字符编码解码、文件操作(1)

时间:2022-02-26 20:27:49

字符编码:

  1. 什么是字符编码?

    字符编码是将人识别的字符转换成计算机能识别的二进制字符(01),转换的规则就是编码表。 

    人能识别的字符串  与  计算机能识别的二进制字符 两者之间对应关系构成的结构称为:编码表

    1.   ASCII码:  字母、数字、英文符号与计算机01标识符的对应关系
    2. 中国(研究汉字与01标识符之间关系):GB2312---->GBK----->GB18030
    3. 日本:shift_JIS
    4. 韩国:Euc-Kr
    5. 万国码(unicode): 目的是创造出一个可以完成各国字符与计算机的01标识符对应的编码表——————>UTF-8
  1.   注意:
    1.   python2 中 使用的是 ASCII码,原因是在python2 诞生之前,没有万国码
    2. python3中使用的是UTF-8,采用万国编码来解释文本内容
    3. UTF-8 与unicode关系:
      1.   unicode 是用两个字节存储汉字,也是用两个自己存储英文字符的,(长度不可变)占用空间较多,但是读取效率高。
      2. UTF-8是用三到六个字节存储汉字,用一个字节来存储英文字符的,(长度可变)占用空间较小,但是读取效率较低。
      3. unicode 与UTF-8都是采用一张编码表,UTF-8是 unicode的体现方式(变长传输,提高传输效率),由于多数数据都是以英文形式存在,所以UTF-8所占空间更小,传输速度更快。
  2. 乱码问题:本质上存数据与读取的数据采用的编码表不同。
  3. 理解文件传输过程中的字符编码的变化:
    1.   在硬盘中,文件可以以各种形式的编码来存储,在传输过程中,即在硬盘往内存中传输文件的过程中,文件都是以UTF-8编码形式传输的,读取到内存后,内存中存储数据是采用的是unicode,然后由内存读到cpu 过程中,也是UTF-8编码形式传输的,读到cup的文件的编码形式也就是UTF-8。
  4. 编码与解码:
s1 = u'abc你好\n不好'  # 万国字符串
print(s1)
s2 = b'abc23\xb7\xb7' # 字节字符串
print(s2)
s3 = r'abc你好\n不好' # 原义字符串
print(s3)

  

# 编码与解码:
s = '123呵呵'
b = bytes(s, encoding='utf-8')
n_b = str(b, encoding='utf-8')
n_b1 = str(b, encoding='GBK')
print(b, n_b, n_b1) # 将u字符串编码成b字符串
print(u'你好'.encode('utf-8')) # 将b字符串解码成u 字符串
print(b'123\xe5\x91\xb5\xe5\x91\xb5'.decode('utf-8'))

文件操作:

    计算机中的文件:本质上是硬盘上存储的一块空间的虚拟文件

     文件操作:根据文件名来操作硬盘中的存储空间的虚拟文件,操作方式有:读(read)写(write)

     操作文件的流程: 打开文件——————操作文件(读写)———————关闭文件

    1.   基本读写操作:

     

# 一使用文件的三步骤:
# 1.打开文件
# 变量名 = 文件空间
# 文件路径 操作模式(读|写) 编码
f = open('123.txt', 'r', encoding='utf-8') # 此处路径是相对路径,因为在同一个文件夹下的操作
# 2.操作文件
data = f.read(10) # 将所有内容读取出来,如果设置读取长度,按照规定长度读取数据 # 一行一行读取
line = f.readline()
print(line)
lines = f.readlines()
print(lines)
print(data) 按行一次性全部读出
l = []
for line in f:
# print(line)
l.append(line)
print(l) set1 = set()
for line in f:
# print(line)
set1.add(line)
print(set1) # 3.关闭文件
f.close() # 释放操作系统对文件的持有,变量f还被应用程序持有 # del f # 不需要该操作,系统自动回收
# 基础写
# 文件不存在:会新建文件,再操作文件
# 文件存在:先清空文件,再操作文件
w = open('b.txt', 'w', encoding='utf-8')
w.write('')
w.close()