• python字符编码及文件操作


    字符编码

    # 重点:什么是字符编码
      人类能识别的是字符等高级标识符,电脑只能识别0,1组成的标识符,要完成人与机器之间的信息交流,一定需要一个媒介,进行两种标识符的转化(两种标识符的对应关系)
    '''
    CPU:将数据渲染给用户,中央处理器
    内存:临时存放数据,断电后消失
    硬盘:永久存储数据,断电后还有
    
    乱码:存数据与读数据采用的编码表不一致
    
    软件打开文件读取数据的流程:
    1. 打开软件
    2. 往计算机发生一个打开文件的指令,来打开文件
    3. 读取数据渲染给用户(存取编码不一致:乱码)
    
    
    python解释器打开py文件
    1. 打开软件(python解释器)
    2. 往计算机发生一个打开文件的指令,来打开文件
    3. 逐行解释打开的文件内容(存取编码不一致,无法正常解释,崩溃),将执行结果展示给用户
    
    解释失败的原因:
    py2默认按ASCII来解释文件内容 | py3默认按UTF-8来解释文件内容
    
    文件头:# encoding: 编码表
    功能:告诉py解释器按照什么编码来解释文件内容
    '''
    

    了解

    '''
    编码表:
    人内识别的字符标识符 与 计算机能识别的01标识符 的对应关系
    
    万国编码:Unicode utf-8
    1. 采用的都是Unicode编码表
    2. Unicode以定长(2字节)存取数据
    3. utf-8以变长(1-6字节)存取数据
    编码表的发展史
    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空间更小)传输速度更快
    '''
    

    编码解码

    # 三种字符串
    # unicode字符串,默认字符串
    s1 = u'abc你好
    不好'
    print(s1)
    # 字节字符串
    s2 = b'abc123xb7xb7'
    print(s2)
    # 原义字符串: 不对字符串内存做任何操作(eg:
    的转化)
    s3 = r'abc你好
    不好'
    print(s3)
    
    # 原义字符串: 不对字符串内存做任何操作(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. 打开文件
    # 变量名 = 文件空间
    # 文件路径 操作模式(读|写) 编码
    f = open('a.txt', 'r', encoding='utf-8')
    
    2. 操作文件(读:read()  写:write())
    # data = f.read(3)  # 将所有内容读取出来,如果设置读取长度,按照规定长度读取数据
    # print(data)
    
    3. 关闭文件 *****
    '''
    
    # 基础读
    
    # 1、打开文件
    # 变量名 = 文件空间
    # 文件路径 操作模式(读|写) 编码
    f = open('a.txt', 'r', encoding='utf-8')
    
    # 2、操作文件
    # data = f.read(3)  # 将所有内容读取出来,如果设置读取长度,按照规定长度读取数据
    # print(data)
    
    # 一次读取一行
    # line = f.readline()
    # print(line)
    # line = f.readline()
    # print(line)
    
    # 按行一次性全部读出
    # lines = f.readlines()
    # print(lines)
    
    # 逐步一行一行读取
    # l = []
    # for line in f:
    #     # print(line)
    #     l.append(line)
    # print(l)
    
    s = set()
    for line in f:
        # print(line)
        s.add(line)
    print(s)
    
    # 3、关闭文件
    f.close()  # 释放操作系统对文件的持有,变量f还被应用程序持有
    
    # 模式
    '''
    主模式:r:读 | w:写 | a:追加
    从模式:b:按字节操作 | t:按字符操作 | +:可读可写
    了解:x:异常写 | U:被遗弃了
    '''
    
    # 基础写 write
    # 文件不存在:会新建文件,再操作文件
    # 文件存在:先清空文件,再操作文件
    w = open('b.txt', 'w', encoding='utf-8')
    w.write('456')
    w.close()
    
    
  • 相关阅读:
    常用坐标系椭球参数整理
    ArcEngine编辑保存错误:Unable to create logfile system tables
    ArcEngine:The XY domain on the spatial reference is not set or invalid错误
    dockManager中DockPanel的刷新问题!
    ibatis实现Iterate的使用
    mongodb用子文档做为查询条件的两种方法
    Eclipse中的文件导航插件StartExplorer
    mongoVUE的增删改查操作使用说明
    什么是脏读,不可重复读,幻读
    转:Maven常用命令
  • 原文地址:https://www.cnblogs.com/fuwei8086/p/10600819.html
Copyright © 2020-2023  润新知