9、字符编码和文件的打开模式

一、字符编码、

"""
1 什么是字符编码
  人类的字符转换成数字的过程称之为字符编码

  该过程需要参照一张表,该表称之为字符编码表

                      编码
  人类的字符-----------转换成--------------》数字

                      解码
  人类的字符《-----------转换成--------------数字


2 字符编码表
  a--00
  b--01
  c--10
  d--11

  ASCII: 用8bit对应一个英文字符
      可以识别英文字符

  gbk:用16bit对应一个字符
      可以识别中文字符、英文字符

  shift-JIS:
      可以识别日文字符、英文字符

  Euc-KR
      可以识别韩文字符、英文字符

  万国字符编码表:unicode,用16bit位对应一个字符
      兼顾两大历史使命
          1、可以识别万国字符
          2、兼容老的字符编码格式

  内存中用的字符编码格式默认都是unicode,而且不能改变
  我们可以改的是存入硬盘的字符编码格式

  万国字符------------》unicode格式的二进制(内存)---------》utf-8格式的二进制(硬盘)
  中文、英文字符------------》unicode格式的二进制(内存)---------》GBK格式的二进制(硬盘)
  日文、英文字符------------》unicode格式的二进制(内存)---------》shift-JIS格式的二进制(硬盘)

  utf-8全称Unicode Transformation Format,

若想保证不乱码
  1、保证存不乱
      存入硬盘的编码格式要能识别输入的字符
  2、保证读不乱
      存取硬盘用得都是同一种字符编码格式
  3、往硬盘存的新文件以后都存成utf-8格式

python3 D:\全栈18期\day09\代码\test.py

python3解释器默认读文件的编码格式是utf-8
python3解释器默认读文件的编码格式是ASCII

推荐用python3解释器,因为python3解释器存字符串类型的值会存储unicode格式
如果用到python2解释器,记得在字符串类型前加前缀u

"""

 

二、bytes类型


    编码                   编码
字符---------》unicode格式----------》utf-8格式
x = "上"

res = x.encode('utf-8')
print(res,type(res))

      解码                   解码
字符<---------unicode格式<----------utf-8格式
print(res.decode('utf-8'))

 

三、with上下文管理


f = open('db.txt',mode='rt',encoding='utf-8')
print(f.read())
print('='*50)
print(f.read())
f.close()


with上下文管理

with open('db.txt',mode='rt',encoding='utf-8') as f:
   print(f.read())
   print('='*50)
   print(f.read())


with open('db.txt',mode='rt',encoding='utf-8') as f,\
       open('b.txt',mode='rt') as f1:
   print(f.read())
   print('='*50)
   print(f.read())

 

四、文件的打开模式

文件的打开模式分为两大类
控制文件读写内容
t(默认):无论读写都是以字符串为单位的,必须指定encoding参数
b:无论读写都是以bytes为单位的


控制文件读写操作
r(默认):只读模式
w:只写
a:只写(追加写)

rt wt at
rb wb ab


r:如果不存在则报错,如果文件存在则指针置于文件开头
with open('a.txt',mode='rt',encoding='utf-8') as f:
   print(f.read())
   print('='*50)
   print(f.read())
   for line in f:
       print(line)

   f.write("你好")  # 报错



w:如果不存在则创建空文档,如果文件存在则清空,指针置于文件开头
with open('a.txt',mode='wt',encoding='utf-8') as f:
   f.write("你好啊1\n")
   f.write("你好啊2\n")
   f.write("你好啊3\n")
   print(f.read())  # 报错


a:如果不存在则创建空文档,如果文件存在则清空,指针置于文件末尾
with open('c.txt',mode='at',encoding='utf-8') as f:
   f.write("你好啊1\n")
   f.write("你好啊2\n")
   f.write("你好啊3\n")

   print(f.read())  # 报错

 

 

posted @ 2021-09-26 20:48  谁笑  阅读(216)  评论(0)    收藏  举报