• 三.字符编码与文件操作


    一.字符编码:

    http://www.cnblogs.com/leesf456/p/5317574.html 参考

    字符编码与二进制:

    计算机底层是二进制,输出中文时,是通过ascii码编译成中英文,
    ASCII码表(美国标准信息交换代码):最多有2*8个字符,256个。
    65-90位26个为大写字母,97-122为小写字母。
    GB2312表:占用72*94的码位。6000多个汉字→→ GBK1.0 :收录了2万多个汉字 →→
    GB18030 :收录了27000多个汉字。  中文为2个字节

    发展历程:
    ASCII 256个字符 →→ GB2312(1980,6700多个汉字)→→GBK(1995,21000)→→GB18030(2000,27000)

    Unicode(万国码):支持所有文字

    占用空间对比:

    ASCII: 
    二进制位=bit = 8bits = 1bytes
    1024 bytes = 1 kb 
    1024 kb = 1 MB 
    ASCII 256, 由于每个ASCII字符都占8位,所以二进制位是用8位,一个字节为8位。
    一个二进制位是计算机里的最小表示单元
    一个字节是计算机最小的存储单位     

    Unicode:一个字符两个字节,一个英文两个字节
      utf-32 = 32位 = 4字节
      utf-16 = 16位 = 2字节
      utf-8 = 8位 = 1字节 可变长编码 :英文一个字节,中文三个字节

    单行注释: #
    多行注释:``` ```  不可以执行,可以被打印

    在python2中与python3中字符编码的区别:

    1.在python2中,

    str:bytes数据

    unicod:unicode编码后的数据

    2.pyhton3中

    str:unicode编码后的数据

    bytes:bytes数据

    bytes:字节类型(二进制类型),所有的字符要存到内存里,硬盘里,都是bytes格式

    在python2里,看到字符串,就是bytes
    在python3里,看到的字符串,是str,

    在python3里面,内存里面全是unicode,而文件的默认编码方式是utf-8

    由于python3内存里面全是unicode,字符串在pyhton3里面也是unicode类型,所有不需要再进行解码,直接编码就行。
    而在python3里面看到bytes,直接encode就是看到bytes.

    编码的encode(),decode()的用法。

    s = '中国'
    print(type(s))
    print(type(bytes(s,encoding='utf-8')))
    b = s.encode(encoding='utf-8')
    print(b)
    print(b.decode(encoding='utf-8'))
    ----------------------------- 运行结果

    <class 'str'>
    <class 'bytes'>
    b'xe4xb8xadxe5x9bxbd'
    中国

    **.编码需要注意的一点就是,用什么编码表编码的就用什么编码变解码,在python3中,一般在文件开头声明给解释器去用utf-8编码格式去解释下面文件内容。

    coding:utf-8

    二.文件的处理:可参考:https://blog.csdn.net/m0_38059843/article/details/78240835

    1.文件操作的三个步骤:

    1>打开文件:f = open('file_path',mode='',encoding='') 

    打开文件的过程是通过内置函数open()得到一个文本i/o的流,Txtiostream ,也可以说成是文件句柄,实际上是一个生成器,具有生成器性质与特征。

    从硬件上去看文件的打开操作:当我们打开一个文件的时间,应用程序会向操作系统发送一个请求打开文件的指令,操作系统就会从硬盘中拿到这个文件的引用,然后交给应用程序使用,所有当我们进行文件处理的时候,要在最后进行文件关闭的操作。

    2>文件操作:

    通过打开文件,获得一个文件流,也就是文件句柄,直接调用f的方法就能对文件进行操作。

    1.f.read() :一次性读取文件的全部内容,f.read(file_size)  file_size 可以确定一次读取文件内容的大小,是以字符单位读取文件内容的。

    2.f.readline():每次读取文件的一行内容。

    3.f.readlines():一次性读取文件的全部的行内容。

    如何得到文件的每一行内容:

    for line in f: f是一个生成器,它会每次遇到一个 就将一行内容赋值给line,从而循环读取文件的每一行。

    3>.文件关闭:f.close()

    3.文件的操作模式:(mode)

    1.纯净模式:r,w,a

    r:只能进行读取文件操作

    w:只能进行文件写的操作

    a:在文件末尾进行写的操作

    2.t模式:文本模式

    1>.读写是以字符串为单位的模式,
    2>.只能针对文本文件,无论是在读过程中只能针对文本文件,无论是在读过程中,还是写过程中会自动将字符串转换成二进制,是因为默认指定的编码方式为utf-8
    3.b模式:二进制模式 读写操作是以二进制位单位的模式,不需要指明encoding的编码方式t,b模式不能单独使用,必须和纯净模式联合使用,如rt,rb,wt,wb

    文件复制:
    with open('file',mode='rb') as f_read:
    data = f_read.read()
    with open('file',mode='wb') as f_write:
    f_write.write(data)

    这样可以进行文件复制,但当文件过大时会出现内存爆掉的可能,所以用以下方式更好:

    with open('file',mode='rb') as f_read,open('file',mode='wb') as f_write:
    for line in f_read:
    f_write.write(line)
    

    文件模式详解:

    1.r模式:只读模式,打开文件,文件不存在报错,指针直接跳到文件开头位置
    2.w模式:写模式 写入文件内容,文件不存在则报错,指针直接跳到文件开头 要加
    文件不存在的时候回创建空文档,文件存在时会清空文件
    3.a模式:追加模式,文件不存在时候新建空文档,文件存在的情况下会将指针移动到文件末尾。

    2.操作文件的方法:r+,w+,a+
    3.文件指针的移动:f.seek()

    4.文件修改的两种方式:

    flush():将文件的内容立即刷到硬盘,在文件写入大量数据时,及时释放内存空间,否则会出现内存溢出,数据丢失,会将文件内容立即刷到硬盘 

    writelines():

    6.文件内指针的移动
    ##大前提:文件内指针的移动是以Bytes为单位的,唯独t模式下的read模式读取文件是以字符串为单位的
    1. f.seek(指针移动的字节数,模式控制)=控制文件指针的移动
    模式控制:
    0:默认模式,该模式代表指针移动的字节数是以文件开头为参照的
    1:该模式代表指针的字节数是以当前文件所在的位置为参照
    2:该模式代表的指针的字节数是以当前文件末尾的位置为参照
    ##强调:其中0模式可以在t或者b模式使用,而1,2模式只能在b模式下用,在2模式下,f.seek(0,2)特殊可以在t模式下使用
    2. f.tell()查看文件指针距离当前文件开头的位置

  • 相关阅读:
    Spyder 快捷键大全
    上传代码到github,出现 git@github.com: Permission denied (publickey) 错误
    Linux ubuntu 安装 openssh-server 报错
    win10删除「此电脑」中的文档、视频、音乐、下载、图片、桌面等6个文件夹的方法
    IDEA 光标闪烁问题
    委托、Action泛型委托、Func泛型委托、Predicate泛型委托的用法
    C#6.0的新语法特性
    创建多个网站
    发送短信功能(C#)
    VS开发Windows服务
  • 原文地址:https://www.cnblogs.com/njzy-yuan/p/10599991.html
Copyright © 2020-2023  润新知