• 字符编码及文件操作


    一、字符编码

     什么是字符编码?

      能识别的是字符高级标识符,电脑只能识别0,1,要完成人与机器之间交流一定需要一个媒介,进行两种标识符的转化(两种标识符的对应关系)

     对应关系形成的结构称之为:编码表

     了解:编码表的发展史:

      1、ASCII:字母、数字、英文字符与计算机01标识符对应关系

      思考:如何将128个字符用01完全标签

      二进制:11111111=>255=>1bytes(1字节)=>8个二进制位

     

      2、中国:研究汉字与计算机01标识符的对应关系:gb2312=>GBK(***)=>GB18030

      日本:Shift_JIS

      棒子:Euc-kr

     

      3、制造一个可以完成万国字符与计算机01标识符的对应关系的编码表

      编码表:Unicode表

      py2:ASCII,没有按万国编码,原因py2要诞生先于玩过编码

      py3:utf-8采用万国编码来解释文本内容

     

      思考:Unicode与Utf-8什么关系?

      Unicode:用2个字节来存储汉字,用2个字节来存储英文字母,占用空间较多,读取效率极高

      Utf-8:用3-6个字节来储存汉字,用1个字节来存储英文字母,占用空间较少,读取效率低

      总结:内存都是按Unicode存储数据,硬盘和cpu采用utf-8来存取数据

     

      Unicode与utf-8采用的是一张Unicode编码表,utf-8是Unicode编码表体现方式,变长储存数据

      变长优点:(大量数据都是以英文存在,所以utf-8空间更小)传输速度更快

      软件打开文件读取数据的流程:

      1、打开软件

      2、往计算机发出一个打开文件的指令,来打开文件

      3读取数据渲染给用户(存取编码不一致,乱码)

     

      python解释器打开py文件的流程:

      1、打开软件(python解释器)

      2、往计算机发出一个打开文件的指令,来打开文件

      3、逐行解释打开的文件内容(存取编码不一致,无法正常解释,崩溃),将执行结果展示给用户

     

      解释失败的原因:

      py2默认按ASCII来解释文件内容,py3默认按UTF-8来解释文件内容

     

      文件头:encoding:编码表

    二、三种字符串

    1、Unicode字符串,默认字符串 

    s1 = u"abc你好
    不好"
      print(s1)

    2、字节字符串

    s2 = b"abc123xb7xb7"
      print(s2)

    3、愿意字符串:不对字符串内存做任何操作(eg: 的转化)

    s3=r"abc你好
    不好"
      print(s3)

       编码与解码

    s = "123呵呵"
    n_b = bytes(s,encoding="utf-8")
      print(n_b)
    
    b =b"123xe5x91xb5xe5x91xb5"
    n_s = str(b,encoding="GBK")
      print(n_s)

     重点:u""和b""之间的转换

    #将u字符串编码成b字符串
    u"".encode("utf-8")
    例:print(u"你好".encode("utf-8"))
    #将b字符串解码成u字符串 b"".decode("utf-8") 例:print(b"xe4xbdxa0xe5xa5xbd".decode("utf-8"))

    三、文件操作

     文件:硬盘中一块储存空间(虚拟的文件)

     文件操作:根据文件名来操作硬盘的那块储存空间,操作方式:读read 写write

     1、使用文件的三步骤:

      1.1、打开文件

      变量名 = 文件空间

      文件路径 操作模式(读|写)编码

    f = open("a.txt","r",encoding="utf-8")

      1.2、操作文件

    #将所有内容读取出来,如果设置读取长度,就按照规定长度读取
    data = f.read()    
    print(data)
    
    #一次读取一行
    line = f.readline()
    print(line)
    
    #按行一次性全部读出
    lines = f.readlines()
    print(lines)
    
    #逐步一行一行读取
    #存入列表
    l=[]
    for line in f:
        l.append(line)
        print(l)
    
    #去重
    s = set()
    for line in f:
        s.add(line)
    print(s)

     3、关闭文件

    f.close()   #释放炒作系统对文件的持有,变量f还被应用程序持有
    
    print{f}

    四、模式:

       主模式:r:读 w:写 a:追加

       从模式:b:按字节操作 t:按字符操作 +:可读可写

       了解:x:写异常 U:被遗弃了

    #基础写
    #文件不存在:会新建文件,在操作文件
    #文件存在:先清空文件,在操作文件
    w = open("b.txt","w",encoding="utf-8")
    w = weite("456")
    w.close()
    print("end")
  • 相关阅读:
    Python 使用 environs 库来更好地定义环境变量
    五分钟带你了解map、reduce和filter
    部署React前端和Django后端的3种方法
    marshmallow库更优雅的数据转换
    利用 attrs 和 cattrs 两个库实现 Python 面向对象编程
    parse库,更友好的格式化数据提取方案
    python之prettytable模块格式化打印
    使用类型注解让 Python 代码更易读
    jksj算法训练营-第三课01 数组、链表、跳表
    linux安装java步骤
  • 原文地址:https://www.cnblogs.com/wangyisen/p/10604475.html
Copyright © 2020-2023  润新知