• 上海day7--字符编码和文件的基本操作类型


    目  录

    一、前提知识

    二、字符编码 *****

    三、文件的基本操作类型

    一、前提知识

    1、运行程序的三个核心硬件:

      cpu 、内存 、硬盘

      任何一个应用程序想要运算,必须先从硬盘加载到内存,然后CPU从内存取指执行。

    2、Python解释器运行一个py文件(xxx.py)的三个步骤:

      先将Python解释器代码从硬盘读到内存;

      将xxx.py以普通文本文件的形式读到内存;

      Python解释器读取文件,识别Python语法,执行操作。

    二、字符编码

    1、字符编码针对的只是文字,像图片、音频、视频等都有指定的格式,所以不需要字符编码。字符编码只与文本文件有关。

    2、文本编辑器的输入输出是两个过程:

      人在操作计算机时输入的是人能够看懂的字符,计算机只能看懂01二进制数字,所以需要一个转变的过程

      输入的字符             >>>( 字符编码表)>>>    二进制数字

    3、字符编码表就是字符与数字的对应关系。

    字符编码表的发展历史:

      ASCII码表:用8位二进制数字表示一个英文字符。

        0000 0000  ~ 1111 1111

      GBK:中国发明的,统一用2个Bytes表示一个中文字符,1个Bytes表示一个英文字符。

        0000 0000 0000 0000

        对应于中国人发明的gbk编码格式,各国都有各自的编码格式,如日本的shift 韩国的 fuck

      Unicode 万国码:统一用2Bytes表示所有的字符。

        缺点:1、浪费存储空间   (英文字符为例,原本1个字节就可以表示,现在用两个字节表示,存储空间加倍)

           2、IO次数增减,程序运行效率降低(致命!)-- 因为文件变大,加载过程会变慢,所以程序运行效率会变低。

    当内存中的unicode编码格式数据存到硬盘的时候,会按照utf-8编码
    unicode transformation format
    
    会将unicode的英文字符由原来的2Bytes变成1Bytes
    会将unicode中文字符由原来的2Bytes变成3Bytes

    注意:现在的计算机内存都是unicode,硬盘都是utf-8。

    需要掌握的

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

    必须要掌握的

    数据由内存保存到硬盘
        1.内存中的unicode格式二进制数字    >>>>编码(encode)>>>>>              utf-8格式的二进制数据
        
        硬盘中的数据由硬盘读到内存
        1.硬盘中的utf-8格式的二进制数据    >>>>>解码(decode)>>>>>             内存中unicode格式的二进制数据
    ***** 重点:保证不乱码的规则 ----文本文件用什么编码编的就用什么编码去解。

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

    文件头:

    # coding:utf-8    
        1.因为所有的编码都支持英文字符,所以文件头才能够正常生效
        
    基于Python解释器开发的软件,只要是中文,前面都需要加一个u
    为了的就是讲python2(当你不指定文件头的时候,默认用ASCII存储数据,如果指定文件头那么就按照文件头的编码格式存储数据)
           
    python3中字符串默认就是unicode编码格式的二进制数
    

      补充:

    1.pycharm终端用的是utf-8格式
    2.windows终端采用的是gbk

     字符编码总结 —— 最终的结论:

    x = ''
    res1 = x.encode('utf-8')  # 将unicode编码成可以存储和传输的utf-8的二进制数据
    print(res1)  # b'xe4xb8x8a'
    # bytes类型  字节串类型  你就把它当成二进制数据即可
    res2 = res1.decode('utf-8')  # 将硬盘中的utf-8格式的二进制数据解码成unicode格式的二进制数据
    print(res2)

    三、文件的基本操作

    文件的处理:

    1、文件的定义:

    什么是文件?
        操作系统提供给用户操作复杂硬件(硬盘)的简易的接口
    
    为什么操作文件
        人或者应用程序需要永久的保存数据

    2、代码操作文件的两种方式

       第一种:

    # r取消转义
    f = open(r'D:Python项目day07a.txt',encoding='utf-8')  # 向操作系统发送请求  打开某个文件
    # 应用程序要想操作计算机硬件 必须通过操作系统来简介的操作
    print(f)  # f是文件对象
    print(f.read())  # windows操作系统默认的编码是gbk
    f.read()  # 向操作系统发请求 读取文件内容
    f.close()  # 告诉操作系统 关闭打开的文件
    print(f)
    print(f.read())

            第二种:文件上下文操作

    with open(r'D:Python项目day07a.txt',encoding='utf-8') as f ,
            open(r'D:Python项目day07.txt',encoding='utf-8') as f1:  # f仅仅是一个变量名 你把它看成是一个遥控器
        print(f)
        print(f.read())
        print(f1)
        print(f1.read())

    文件的处理模式

    文件打开的模式:

      r 模式    w模式       a 模式

    操作文件单位的方式:

      t 文本文件 : t 在使用的时候要指定encoding 参数,如果不指定就是操作系统自带的默认编码方式

      b 二进制 :  一定不能指定encoding 参数

    # mode参数 可以不写  不写的话默认是rt 只读的文本文件  这个t不写默认就是t
    with open(r'D:Python项目day07a.txt',mode='r',encoding='utf-8') as f:
        print(f.readable())  # 是否可读
        print(f.writable())  # 是否可写
        print(f.read())  # 一次性将文件内容全部读出

     r 模式:

      r模式在打开文件时,如果文件不存在会直接报错;可以写相对路径也可以写绝对路径,但相对路径要在同一层文件下。

    with open(r'a.txt',mode='r',encoding='utf-8') as f:
    with open(r'a.txt','r',encoding='utf-8') as f1:  mode关键字可以不写
        print(f.readable())  # 是否可读
        print(f.writable())  # 是否可写
        print(">>>1:")
        print(f.read())  # 一次性将文件内容全部读出
        print('>>>2:')
        print(f.read())  # 读完一次之后 文件的光标已经在文件末尾了,再读就没有内容了可读
        print(f.readlines())  # 返回的是一个列表  列表中的一个个元素对应的就是文件的一行行内容
        for line in f:  # f可以被for循环 每for循环依次 读一行内容
            print(i)  # 这个方法 就可以解决大文件一次性读取占用内存过高的问题
        print(f.readline())  # 只读取文件一行内容
        print(f.readline())
        print(f.readline())
        print(f.readline())
    View Code

    w模式:

      w模式一定要慎用:

        当文件不存在的时候会新建文件;

        当文件存在的时候会先清空在写入内容。

    a模式:

      a模式是追加写模式:

        当文件不存在的时候,会新建文件;

        当文件存在的时候,不会清空文件,鼠标的光标会在移动到文件的最后,再添加写入内容。

  • 相关阅读:
    对MVC模型的自悟,详尽解释,为了更多非计算机人员可以理解
    openSUSE leap 42.3 实现有线 无线同时用
    Fedora27 源配置
    Ubuntu16.04添加HP Laserjet Pro M128fn打印机和驱动
    openSUSE leap 42.3 添加HP Laserjet Pro M128fn打印机和驱动
    OpenSUSE Leap 42.3下通过Firefox Opera Chromium浏览器直接执行java应用程序(打开java jnlp文件)实现在服务器远程虚拟控制台完成远程管理的方法
    OpenSUSE Leap 42.3 安装java(Oracle jre)
    linux下支持托盘的邮件客户端Sylpheed
    Ubuntu下通过Firefox Opera Chromium浏览器直接执行java应用程序(打开java jnlp文件)实现在服务器远程虚拟控制台完成远程管理的方法
    Firefox 浏览器添加Linux jre插件
  • 原文地址:https://www.cnblogs.com/qinsungui921112/p/11139694.html
Copyright © 2020-2023  润新知