zoukankan      html  css  js  c++  java
  • 字符编码及文件处理

    一.字符编码

    运行程序的三大核心硬件:CPU,内存,硬盘

    python解释器运行.py文件的三大步骤 :

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

    (2)将.py以普通文本文件形式读到内存的解释器中

    (3)python读取文件内容 识别python语法 执行相应操作

    ps:普通的文本编辑器与python解释器前两步都是一样的

    1.字符编码发展史

    ASCII表 :用八位二进制表示一个英文字符 或拉丁文字符

        缺点:无法兼容其他字符

    GBK:  用2Bytes表示一个中文字符   用1Bytes表示一个英文字符

                  缺点:无法兼容其他字符

    Unicode : 统一用2Bytes表示所有的字符

        优点:1.用户在输入的时候,无论输什么字符都能够兼容万国字符

           2.其他国家编码的数据由硬盘读到内存的时候unicode与其他各个国家的编码都有对应关系

        缺点:1.浪费存储空间

           2.io次数增减,程序运行效率降低(致命)

    utf-8 : 用3Bytes表示一个中文字符   用1Bytes表示一个英文字符现在的计算机

    现在的计算机内存基本采用Unicode编码,硬盘采用utf-8 编码

    完美中计算机内存和硬盘应该都采用utf-8 编码

    2.编码与解码

    encode:数据由内存保存到硬盘           一般是将内存中的unicode格式二进制数字编码(encode)成硬盘中utf-8格式的二进制数据

    decode:硬盘中的数据由硬盘读到内存   一般是将硬盘中的utf-8格式的二进制数据 解码(decode)成 内存中unicode格式的二进制数据

    乱码 :编码方式和解码方式不一致

    ps:不乱码的核心在于文本文件以什么格式的编码,就以什么编码解

    3.版本差异

    python 2.0

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

    python 3.0

        将py文件按照文本文件读入解释器中默认使用utf-8

    4.小知识点

    文件头  

        # coding:utf-8     

        1.因为所有的编码都支持英文字符,所以文件头才能够正常生效(在运行py文件的第二步中执行)

     基于Python2解释器开发的软件,只要是中文,前面都需要加一个u

     python3中字符串默认就是unicode编码格式的二进制数不用加

      ps:pycharm终端用的是utf-8格式;windows终端采用的是gbk

    5.总结

    可以通过.encode方法把unicode编码成utf-8的二进制数据,方便进行存储和传输。

    可以通过.decode方法把将硬盘中的utf-8格式的二进制数据解码成unicode格式的二进制数据

    二.文件处理

    1.文件三问

        (1)什么是文件?

          操作系统给用户的一种对硬盘进行操作的一种简单接口

        (2)为什么要用文件?

          为了在硬盘上永久储存数据

        (3)如何用?

          f.open()

          f.close()   

    2.打开两种方式

    f = open(r"a.txt" ,'rt', encoding= "utf-8")
    print(f.read())
    f.close()
    
    with open(r"a.txt" ,'rt', encoding= "utf-8")  as f :
        print(f)
        print(f.read())
    View Code

    open(r'路径', mode = ' ' ,encoding='')

    r:转义字符

    打开文件推荐在路径前加r

    路径分为绝对路径和相对路径。

    with open( ) as f :

    可以自动关闭系统文件

    mode参数不写的话默认是rt

    3.打开模式

    打开模式有三种 :

            (1)r 只读模式

            (2)w 只写模式

            (3)a 追加写模式

    三种模式都可以使用的方法是readable和writeable来判断文件是否可读可写。

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

        read方法

    with open(r"a.txt" ,'rt', encoding= "utf-8")  as f :
        print(f)
        print(f.read())  # 一次读取文件的全部内容
    View Code

        readline方法

    with open(r"a.txt" ,'rt', encoding= "utf-8")  as f :
        print(f.readline())
        print(f.readline())   # 一次读取一行内容
    View Code

        readlines方法

    with open(r"a.txt" ,'rt', encoding= "utf-8")  as f :
        print(f.readlines())  # 返回的是一个列表  列表中的一个个元素对应的就是文件的一行行内容
        for line in f :
            print(line)       # readlines与for循环类似
    View Code

    w模式

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

        2.当文件存在的情况下 会先清空文件内容再写入

        write方法

    with open(r"xxoo.txt" , 'wt', encoding= "utf-8")  as f :
        
         f.write("nizhenhao
    " )  # 向文件中写入字符
    View Code

        writelines方法

    l = {"name" : "wanglei", "sex" :"femal"}
    with open(r"xxoo.txt" , 'wt', encoding= "utf-8")  as f :
        print(f.writelines(l))   # 类似于for循环的遍历
    View Code

    a模式

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

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

        write方法

    with open(r"xxoo.txt" , 'at', encoding= "utf-8")  as f :
        print(f.writable())
        f.write("nizhenhao
    " )  # 向文件中写入字符
    View Code

    4.操作单位的方式

    操作单位的两种方式

            (1)t 文本文件       t在使用的时候需要指定encoding参数 如果不知道默认是操作系统的默认编码

            (2)b  字节串        一定不能指定encoding参数

    with open(r"D:PycharmProjectsuntitledvenvday7xxoo.txt" , mode='rb')  as f :
        print(f.read())
    View Code

            

  • 相关阅读:
    spring cloud项目搭建
    获取iframe的window对象
    数学杂谈 #7
    [AGC023D] Go Home
    JOISC 2021 部分题解
    [NOI2017]泳池
    [NOI2016] 循环之美
    [NOI2016] 优秀的拆分
    [LG P3676]小清新数据结构题
    [ARC113F]Social Distance
  • 原文地址:https://www.cnblogs.com/Cpsyche/p/11141070.html
Copyright © 2011-2022 走看看