zoukankan      html  css  js  c++  java
  • 字符编码-编码解码-文件操作

    字符编码

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

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


    乱码:存数据与读数据采用的编码表不一致

    软件打开文件读取数据的流程:
    1. 打开软件
    2. 往计算机发生一个打开文件的指令,来打开文件
    3. 读取数据渲染给用户(存取编码不一致:乱码)


    python解释器打开py文件
    1. 打开软件(python解释器)
    2. 往计算机发生一个打开文件的指令,来打开文件
    3. 逐行解释打开的文件内容(存取编码不一致,无法正常解释,崩溃),将执行结果展示给用户

    解释失败的原因:
    py2默认按ASCII来解释文件内容 | py3默认按UTF-8来解释文件内容

    文件头:# encoding: 编码表
    功能:告诉py解释器按照什么编码来解释文件内容

    1. ascii(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空间更小)传输速度更快

    编码解码

    原义字符串: 不对字符串内存做任何操作(eg: 的转化)
     r'abc abc' => 'abc abc'

    u'' 之间转化 b''
     编码:u''.encode('utf-8') | bytes(u'', encode='utf-8')
     解码:b''.decode('utf-8') | str(b'', encode='utf-8')

    文件操作

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

    1. 打开文件

    2. 操作文件(读:read() 写:write())

    3. 关闭文件

    主模式:r:读 | w:写 | a:追加
    从模式:b:按字节操作 | t:按字符操作 | +:可读可写
    了解:x:异常写 | U:被遗弃了

           基础读

    f=open('a.txt','r',encoding='utf-8')
    data=f.read(12)
    print(data)
    f.close

    一次读取一行
    f=open('a.txt','r',encoding='utf-8')
    line=f.readline()
    print(line)
    f.close

    按行一次性全部读出
    f=open('a.txt','r',encoding='utf-8')
    lines=f.readlines()
    print(lines)
    f.close
    逐步一行一行读取
    f=open('a.txt','r',encoding='utf-8')
    l=[]
    for line in f:
    l.append(line)
    print(l)
    f.close
    ----------------------------
    
    
    f=open('a.txt','r',encoding='utf-8')
    s=set()
    for line in f:
    s.add(line)
    print(s)
    f.close

    基础写
     文件不存在:会新建文件,再操作文件
     文件存在:先清空文件,再操作文件

    
    
    f=open('a.txt','w+',encoding='utf-8')
    f.write('hello world')
    f.close



     
     


     


  • 相关阅读:
    微信小程序学习系列(5) 微信小程序逻辑层
    微信小程序学习系列(4) 微信小程序架构文件
    微信小程序学习系列(3) 如何优雅的使用微信开发者工具
    使用Sqlserver 2012 导出表数据为SQL脚本
    Sqlserver2012 使用sql语句增加(或删除)表一个字段
    微信小程序学习系列(2) 使用AppId创建一个微信小程序
    微信小程序学习系列(1) 如何注册微信小程序
    微信小程序如何使用Vant
    vs2017搭建自己的nuget服务器
    使用swagger实现在线api文档自动生成 在线测试api接口
  • 原文地址:https://www.cnblogs.com/sima-3/p/10600391.html
Copyright © 2011-2022 走看看