zoukankan      html  css  js  c++  java
  • day10 字符编码、python2和3的区别、文件的三种打开模式、with管理文件操作

    字符编码:

    字符编码: 二进制 和 你所能认识的字符 之间的相互转换的一个过程

    早期的ascii码

     

    中国人的gbk码,4个字节

    unicode: 认识万国语言,万国编码

    unicode:把 8位的英文变成了16位的英文, 多占用了内存空间,因此产生了utf8码可以节省储存空间

     

    出现乱码的情况

    编码格式不统一

    文本编辑器支持的是utf8 ,你输入的是gbk --> 文件的存储

    文件存储用了utf8 ,但是下次打开用了gbk --> 文件的读取

     通俗举例:

    中文的文本编辑器只认识中文,然后你输入了日文 --> 乱码 # encode 编码

    文本编辑器存储了中文(文件),但是你用日本的编辑器打开这个文件 --> 乱码 # decode 解码

     

    如何解决乱码:

    什么格式存储, 就什么格式读取 就不会乱码(牢记这句话)

    windows电脑的记事本默认为gbk编码,除此之外其他的软件默认编码为utf8

    Python2和3的区别:

    python解释器运行代码的流程

    1. 启动python解释器(相当于文本编辑器)
    2. 打开文件,显示这个字符并检查语法(涉及字符编码, a=1只是一个很普通的字符)
    3. 解释字符 (涉及字符编码,再去内存空间 生成一个a=1的变量)

    第二步python2和python3的区别

    python2默认是ascii读取字符, python3默认是utf8读取字符,coding:gbk`会告诉python3解释器用gbk编码读取字符

    第三部python2和python3的区别 

    Python2(了解)

    使用unicode 或者 指定的coding编码(str类型)

     ```python

    # coding:gbk
    a = '中文' # 用gbk编码存储了这堆0和1
    a = u'中文' # 用unicode编码存储了这堆0和1
    print(a)
    ```

     终端是一个文本编辑器,会有默认编码.

    假设终端的默认编码是gbk , 认识 gbk编码的变量

    假设终端的默认编码是utf8, 不认识 gbk编码的变量

     python3(了解)

    使用unicode

    ```python
    # coding:gbk
    a = '中文' # 用unicode编码存储了这堆0和1
    print(a) # 010101010
    ```

    在终端中看到的其实是unicode,但是终端帮你把这个unicode的0和1做一个转换,

    从unicode转换成了终端能够识别的编码格式,然后变成中文

    假设终端的默认编码是gbk , 认识 unicode编码的变量

    假设终端的默认编码是utf8,认识 unicode编码的变量

    文件的三种打开模式

    r模式:

    f = open('test.py','r',encoding='utf8') # 只读 # 文件内容拿出来,读一行少一行

    print(f.read()) # 读取文件所有内容, 

    print(f.readline()) # 读取一行

    print(f.readlines()) #读取所有内容,但是是以列表的形式展示

    print(f.readable()) # 判断是否可读 # True

    f.close()

    以后使用这个方式循环文件for i in f:

      print(i)


    w模式:
    f = open('test.py','w',encoding='utf8') # 只写 # 清空后再写,自动创建文件
    lt = ['sdklfj','sdkfjksldf']
    res = ' '.join(lt)
    f.write(res) 


     print(f.readable())
    print(f.writable()) #判断是否可写
    f.writelines(['sdklfj','sdkfjksldf']) #只能以列表的形式
    f.close()

    a模式:
    f = open('test.py','a',encoding='utf8') # 追加 # 文件末追加
    f.write('nick handsome') 
    f.close()

    二进制模式:

    文本模式t(默认)
    f = open('test.py','rt')
    data = f.read()
    print(data)


    进制模式b(打开图片视频等都需要用到)
    f = open('python2和3的字符编码的区别.png', 'rb')
    f = open('python2和3的字符编码的区别.png', 'wb')
    f = open('python2和3的字符编码的区别.png', 'ab')
    data = f.read()
    print(data)

    fw = open('test.png','wb')  # encoding是为了让二进制代码变成文本所需要的,所以b模式不需要encoding
    fw.write(img)

    with管理文件操作
    with open('test1.png','wb') as fw: # 自动关闭文件
    fw.write(img)

    with open('test.py', 'rt', encoding='utf8') as fr2,
    open('test.txt', 'rt', encoding='utf8') as fr1,
    open('test.png', 'rb') as fr3:
    data1 = fr1.read()
    print('data1', data1)
    data2 = fr2.read()
    print('data2', data2)
    data3 = fr3.read()
    print('data3', data3)

    反斜杠用来表示所属同一行
    print('skdfjlllllllsfsdfsdfskdfjlllllllsfsdfsdfskdfjlllllllsfsdfsdfskdfjlllllllsfsdfsdfskdfjlllllllsfsdfsdfskdfjll
    英')

     

     

  • 相关阅读:
    WinForm的Chart控件画条形图
    WinForm的Chart控件画折线图
    自定义控件
    左侧收缩菜单
    数组
    C#生成随机数的三种方法
    WinForm之GDI手动双缓冲技术
    WinForm之GDI画图步骤
    WinForm GDI编程:Graphics画布类
    翻译:《实用的Python编程》08_02_Logging
  • 原文地址:https://www.cnblogs.com/wwei4332/p/11315963.html
Copyright © 2011-2022 走看看