字符编码及文件处理

一.字符编码

运行程序的三大核心硬件: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\n" )  # 向文件中写入字符
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\n" )  # 向文件中写入字符
View Code

 

4.操作单位的方式

操作单位的两种方式

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

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

with open(r"D:\PycharmProjects\untitled\venv\day7\xxoo.txt" , mode='rb')  as f :
    print(f.read())
View Code

 

        

posted @ 2019-07-05 22:27  Tri_stone  阅读(221)  评论(0编辑  收藏  举报