zoukankan      html  css  js  c++  java
  • Python基础(字符编码与文件处理)

    一、了解字符编码的知识储备

     1、计算机基础知识(三副图)

      

    2、文本编辑器存取文件的原理(notepad++,Pycharm,word)

      打开编辑器就启动了一个进程,是在内存中运行的,所以在编辑器写的内容在没保存之前都是存放在内存中的,断电后数据就会丢失。因而需要保存到硬盘上,点击保存按钮,就从内存中把数据刷到硬盘上。

    3、Python解释器执行py文件的与原理,例如python test.py

      第一阶段:python解释器启动,此时就相当于启动了一个文本编辑器。

      第二阶段:python解释器相当于文本编辑器,去打开test.py文件,从硬盘将test.py的文件内容读到内存中。

      第三阶段:python解释器解释执行刚刚加载到内存中test.py的代码。(PS:在该阶段,即执行时,才会识别python的语法,执行文件内代码,执行到name='tracy',会开辟内存空间存放字符串'tracy')

    总结:python解释器与文本编辑器的异同

      相同点:python解释器是执行文件内容的,因而python解释器具备都py文件的功能,这一点与文本编辑器一样

      不同点:文本编辑器将文件内容读入内存后,是未来显示/编辑,而python解释器将文件读入内存后,是为了执行(识别python语法)

    二、什么是字符编码

      计算机要想工作必须通电,也就是说电驱使计算机干活,而电的特性,就是高低电平。(高低电平即二进制数1,低电平即二进制0),也就是说计算机只认识数字。

      如何能让计算机读懂人类的字符?

      字符----->(翻译过程)------>数字

      这个过程实际就是一个字符如何对应一个特定数字的标准,这个标准称之为字符编码。

    三、字符编码的发展史

      阶段一:现代计算机起源于美国,最早诞生也是基于英文考虑的ASCII

      ASCII:一个Bytes代表一个字符(英文字符/键盘上的所有其他字符),1Bytes=8bit,8bit可以表示0-2**8-1种变化,即可表示256个字符。

      阶段二:为了满足中文,中国人定制了GBK

      GBK:2Bytes代表一个字符

      阶段三:日本人定制了Shift_JIS,韩国人定制了Euc-kr等等

      小结:各国有各国的标准,就会有不可避免的冲突,结果就是,在多语言混合的文本中,显示出来就会有乱码。

      于是产生了Unicode,同意用2B有特色代表一个字符,2**16-1=65535,可代表6万多个字符,因而兼容万国语言。

      但是对于通篇都是英文的文本来说,这种编码方式无疑是多了一倍的存储空间。于是产生了utf-8,对英文字符只用1Bytes表示,对中文字符用3Bytes表示。

      unicode特性:简单粗暴,所有字符都是2Bytes,优点是字符->数字的转换速度快,缺点是占用空间打。

      utf-8特性:精准,对不同的字符用不同的长度表示,有点是节省空间,缺点是:字符-->数字的转换速度慢,因为每次都需要计算出字符需要多长的Bytes才能够准确表示。

      内存中使用的编码是Unicode,用空间换时间。

      硬盘中或者网络传输用utf-8,网络I/O延迟或者磁盘I/O延迟要远大于utf-8的转换延迟,而且I/O应该是尽可能地节省带宽,保证数据传输的稳定性。

    四、字符编码的使用

      文本编辑器转换图

      Unicode--->encode----->utf-8

      uft-8--------->decode----->Unicode

      

       分析字符转换过程:

       文件从内存刷到硬盘的操作简称存文件

       文件从硬盘读到内存的操作简称读文件

       分析乱码:

      1、存文件时就已经乱码的情况;

      2、存文件时不乱码而读文件时乱码;

      小结:  

      无论是何种编辑器,要防止文件出现乱码(请一定注意,存放一段代码的文件也仅仅只是一个普通文件而已,此处指的是文件没有执行前,我们打开文件时出现的乱码)

      核心法则就是,文件以什么编码保存的,就以什么编码方式打开。

      python2默认ASCII,python3默认utf-8,除非文件头部指定编码方式。

      针对python3如下图;

      

      在浏览网页的时候,服务器会吧动态生成的Unicode内容转换为UTF-8再传输到浏览器

      如果服务端encode的编码格式是utf-8,客户端内存中收到的也是uft-8编码的二进制。

      在python3中也有两种字符串类型str和bytes

      str是Unicode 

    #coding:utf-8
    s='' #当程序执行时,无需加u,'林'也会被以unicode形式保存新的内存空间中, #s可以直接encode成任意编码格式 s.encode('utf-8') s.encode('gbk') print(type(s)) #<class 'str'>

    bytes是bytes

    #coding:utf-8
    s='' #当程序执行时,无需加u,'林'也会被以unicode形式保存新的内存空间中,
    
    #s可以直接encode成任意编码格式
    s1=s.encode('utf-8')
    s2=s.encode('gbk')
    
    print(s) #
    print(s1) #b'xe6x9ex97' 在python3中,是什么就打印什么
    print(s2) #b'xc1xd6' 同上
    
    print(type(s)) #<class 'str'>
    print(type(s1)) #<class 'bytes'>
    print(type(s2)) #<class 'bytes'>

      总结:

    字符编码
    python2 str --> bytes ascii
    python3 str --> unicode

    文件处理
    r读 光标文件开头 不会影响文件内容
    w写 光标在文件开头 打开文件的时候文件即被清空
    a追写 光标在文件末尾 不会影响文件内容
    r+可读可写 光标在文件开头
    w+可写可读 光标在文件开头 打开文件的时候文件即被清空
    a+追加可读 光标在文件末尾
    带b 上面的6种模式都可以+b
    #只读方式打开文件,读
    #f = open('复习.py','r',encoding='utf-8')
    #f文件+句柄  能操作文件的一个东西
    #for i in f:
    #     print(i,end='')
    #写方式打开文件
    # f = open('复习2.py','w',encoding='utf-8')
    #可写可读  打开文件的时候文件就为空,写的是任意内容,读的是刚刚写进去的内容
    #要想读,先移动光标
    #读的光标和写的光标是两回事
    # f = open('复习2.py','w+',encoding='utf-8')
    # f.write('12237yuiayi')
    # #seek 制定光标的位置在0位置
    # f.seek(0)
    # print(f.read(3))
    # f.write('kahkshldkhd')
    # print('***',f.read())
    # f.close()
    #可读可写
    # f = open('复习2.py','r+',encoding='utf-8')
    # print(f.read())
    # f.write('
    ajshdjkdjk')
    # f.close()
    #追加可读
    f = open('复习2.py','a+',encoding='utf-8')
    f.seek(0)
    print(f.read())
    
    
    
     
  • 相关阅读:
    敏捷开发(五)- 框架SCRUM内容
    敏捷开发(四)- 故事验收测试
    敏捷开发(三)- 估算故事
    敏捷开发(二)- 编写故事
    敏捷开发(一)- 搜集故事
    项目管理(十)- 开发准备列表
    项目管理(九)- 组织项目资源
    web 前端常用组件【04】Datetimepicker 和 Lodop
    让时间处理简单化 【第三方扩展类库org.apache.commons.lang.time】
    Word 打包 zip 并提供下载
  • 原文地址:https://www.cnblogs.com/bingpan/p/7230882.html
Copyright © 2011-2022 走看看