zoukankan      html  css  js  c++  java
  • 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()
    
    
  • 相关阅读:
    CodeForces 785D Anton and School
    CodeForces 785C Anton and Fairy Tale
    CodeForces 785B Anton and Classes
    CodeForces 785A Anton and Polyhedrons
    爱奇艺全国高校算法大赛初赛C
    爱奇艺全国高校算法大赛初赛B
    爱奇艺全国高校算法大赛初赛A
    EOJ 3265 七巧板
    EOJ 3256 拼音魔法
    EOJ 3262 黑心啤酒厂
  • 原文地址:https://www.cnblogs.com/fuwei8086/p/10600819.html
Copyright © 2011-2022 走看看