• 字符编码,文件处理


    今日学习内容,字符编码。

    首先复习一下运行文件的基本操作:

    计算机的三个核心组件:CPU、内存、硬盘。

    任何一个程序要想运算,必选先有硬盘加载到内存,然后cpu去内存取指执行,运行着的应用程序产生的数据,必先存在内存。

    然后是回顾了python解释器运行一个py文件(如xxx.py)的步骤:

    1、将python解释器的代码由硬盘读到内存。

    2、将xxx.py以普通文本文件形式读到内存。

    3、python读取文件内容,识别python语法,执行相应的操作。

    (普通的文本编辑器与python解释器的前两步是一样的)

    字符编码

    今天学习的新内容是字符编码,字符编码针对文字,字符编码只跟文本文件有关。

    人在操作计算机的时候输入的是人能够看懂的字符,但是计算机只能识别0101010这样的二进制数据。输入的流程是输入字符>>>字符编码表(字符编码表就是字符与数字的对应关系)>>>二进制数字。

    字符编码的发展史以及分类

    第一个阶段

    计算机由美国人发明,所以最早的字符编码为ASCII。

    第二个阶段

    中国规定的GBK编码。

    日本人规定的Shift_JIS编码。

    韩国人规定的Euc-kr编码。

    第三个阶段

    unicode万国码(能包括全世界的语言)。

    为了可以节省unicode耗费空间的UTF-8编码。

    结果:内存中统一采用unicode,浪费空间换区可以转换成任意编码(乱码),硬盘采用utf-8,保证存放于硬盘或者基于网络传输的数据量很小,提高传输效率与稳定性。

    unicode的两个特点
    1.用户在输入的时候,无论输什么字符都能够兼容万国字符
    2.其他国家编码的数据由硬盘读到内存的时候unicode与其他各个国家的编码都有对应关系

    存取过程中的数据变换:

    数据由内存保存到硬盘
    1.内存中的unicode格式二进制数字 >>>>编码(encode)>>>>> utf-8格式的二进制数据
    硬盘中的数据由硬盘读到内存
    1.硬盘中的utf-8格式的二进制数据 >>>>>解码(decode)>>>>> 内存中unicode格式的二进制数据

    乱码:字符不能够正常显示 (编码不一致)

    保证不乱码的关键在于文本文件以什么编码就用什么解码。

    python2
    将py文件按照文本文件读入解释器中默认使用ASCII码(因为在开发python2解释器的unicode还没有盛行)
    python3 
    将py文件按照文本文件读入解释器中默认使用utf-8

     

    基于Python解释器开发的软件,只要是中文,前面都需要加一个u
    在python2中,当你不指定文件头的时候,默认用ASCII存储数据,如果指定文件头那么就按照文件头的编码格式存储数据。python3中字符串默认就是unicode编码格式的二进制数。

    补充点:1.pycharm终端用的是utf-8格式。2.windows终端采用的是gbk。

    x = ''
    res1 = x.encode('gbk')  # 将unicode编码成可以存储和传输的utf-8的二进制数据
    print(res1)  # b'xe4xb8x8a'
    # bytes类型  字节串类型  你就把它当成二进制数据即可
    res2 = res1.decode('gbk')  # 将硬盘中的utf-8格式的二进制数据解码成unicode格式的二进制数据
    print(res2)
     你a他
    1Bytes|1Bytes|1Bytes|1Bytes|1Bytes|1Bytes|1Bytes  
    1+7bit|1+7bit|1+7bit|1+7bit|1+7bit|1+7bit|1+7bit  # 每个Bytes真正的有效位数是7位,而首位是一个标志位。

    文件处理

    什么是文件?操作系统提供给用户操作复杂硬件(硬盘)的简易接口。

    为什么要操作文件?人或者应用程序需要永久的保存数据。

    怎么使用?

    #1. 向操作系统发送请求,打开某个文件(应用程序要想操作计算机硬件 必须通过操作系统来简介的操作)
    f=open('a.txt','r',encoding='utf-8') #默认打开模式就为r
    #2. 向操作系统发请求 读取文件内容
    f.read()
    #3. 告诉操作系统 关闭打开的文件
    f.close()

    with open

    with open(r'D:Python项目day07a.txt',encoding='utf-8') as f ,

    可以自动帮你调用f.close()

    文件打开的模式

     r   只读模式

     w   只写模式   

     a   追加写模式

    print(f.readable())  # 是否可读
    print(f.writable())  # 是否可写
    print(f.read())  # 一次性将文件内容全部读出

    补充:文件路径可以写相对路径,但是需要注意该文件必须与执行文件在同一层文件下。

    r模式在打开文件的时候,如果文件不存在,则直接报错

    with open(r'a.txt',mode='r',encoding='utf-8') as f:  mode关键字可以不写
    print(">>>1:")
    print(f.read())  # 一次性将文件内容全部读出
    print('>>>2:')
    print(f.read())  # 读完一次之后 文件的光标已经在文件末尾了,再读就没有内容了可读
    print(f.readlines())  # 返回的是一个列表  列表中的一个个元素对应的就是文件的一行行内容,内部相当于一个for循环。
    print(f.readline())  # 只读取文件一行内容
      

    w模式需要慎用

    1、文件不存在的情况下,自动创建该文件。

    2、文件存在的情况下,先清除文件内容,再写入。

    with open(r'xxx.txt',mode='w',encoding='utf-8') as f:  # 当文件xxx.txt不存在时,会生成一个该文件。
       print(f.readable())  # 是否可读
       print(f.writable())  # 是否可写
       f.write('不不不,你没有翻~
    ')  # write是用来写入内容的,
    是用来换行的。
       l = ['不sdffs,sdfs有翻~
    ','不sdfsdf不,你sdfsf翻~
    ','不sfad不,你没sa翻~
    ']
       f.writelines(l)  # writeliens的作用是,写入列表l中的所有内容,内部原理也是一个for循环

    a模式

    1.当文件不存在的情况下 自动创建该文件

    2.当文件存在的情况下,不清空文件内容, 文件的光标会移动文件的最后

    with open(r'yyy.txt',mode='a',encoding='utf-8') as f:
        f.write('我是小尾巴
    ')

    操作文件单位的方式
    t 文本文件 t在使用的时候需要指定encoding参数 如果不知道默认是操作系统的默认编码
    b 二进制 一定不能指定encoding参数

  • 相关阅读:
    SpringMVC拦截器
    SpringMVC异常
    SpringMVC文件上传
    SpringMVC返回值类型
    JVM字节码
    使用Apache JMeter进行测试
    Tomcat优化
    垃圾收集器
    GC常见算法
    VisualVM远程连接Tomcat
  • 原文地址:https://www.cnblogs.com/wkq0220/p/11147677.html
Copyright © 2020-2023  润新知