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

    Day07

    复习

    运行程序的三个核心硬件:CPU、内存、硬盘

    Python解释器运行一个py文件的步骤:

    • a.将Python解释器从硬盘读到内存

    • b.将py文件以普通文本文件的形式读到内存

    • c.解释器识别Python语法,执行响应的操作

    • ps:普通文本编辑器和Python解释器前两部都是一样的

    字符编码

    是什么:字符编码就是字符与数字的对应关系

    发展史

    阶段一:现代计算机起源于美国,最早诞生也是基于英文考虑的ASCII
    阶段二:为了满足中文和英文,中国人定制了GBK
    阶段三:各国有各国的标准,就会不可避免地出现冲突,
    		结果就是,在多语言混合的文本中,显示出来会有乱码
    解决方案:unicode 和 UTF-8
    • 总结

      • 内存中统一采用unicode,浪费空间来换取可以转换成任意编码(不乱码)

      • 硬盘可以采用各种编码, 如utf-8,保证存放于硬盘或者基于网络传输的数据量很小,提高传输效率与稳定性。

    unicode特点

    • 能够兼容万国字符

    • 与全世界所有的字符编码都有映射关系,这样就可以转换成任意国家的字符编码

    注意

    • 保证不乱码在于:文本文件以什么编码编的就以什么编码解

    • Python2和Python3的区别

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

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

    • 文件头

      • coding:utf-8 :因为所有的编码都支持英文字符,所以文件头才能够正常生效

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

      • 举个例子:python2中(当你不指定文件头的时候,默认用ASCII存储数据,如果指定文件头那么就按照文件头的编码格式存储数据)

    补充

    • 1.pycharm终端用的是utf-8格式 2.windows终端采用的是gbk

    总结

    • encode('utf-8')将unicode编码成可以存储和传输的utf-8的二进制数据

    • decode('utf-8')将硬盘中的utf-8格式的二进制数据解码成unicode格式的二进制数据

    文件处理

    复习

    • 什么是文件:操作系统提供给用户操作复杂硬件的建议接口

    • 为什么操作硬件:人或者应用程序需要永久的保存数据

    操作文件的方法

    • f = open()

      • 人或者应用程序,通过操作系统操作硬件的

      • f = open(文件路径,编码格式) f = open(r'D:Python项目day07a.txt',encoding='utf-8') # r表示取消转义 print(f) # f是文件对象

    • f.read() # 向操作系统发请求 读取文件内容

    • f.close() # 告诉操作系统 关闭打开的文件

    • 演示

      with open(r'D:PythonDay07a.txt',encoding='utf-8') as f ,
              open(r'D:PythonDay07.txt',encoding='utf-8') as f1:  
      '''
       f仅仅是一个变量名 你把它看成是一个遥控器
      '''
          print(f)
          print(f.read())
          print(f1)
          print(f1.read())

    文件处理的模式

    • r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】

    • w,只写模式【不可读;不存在则创建;存在则覆盖内容】

    • a, 只追加写模式【不可读;不存在则创建;存在则只追加内容】

    • t ,文本文件; t在使用的时候需要指定encoding参数 如果不写encoding则默认是操作系统的默认编码

    • b ,二进制 ; 一定不能指定encoding参数

    演示1:

    # mode参数 可以不写,不写的话默认是rt(只读文本文件)这个t如果不写默认就是t
    with open(r'D:PythonDay07a.txt',mode='r',encoding='utf-8') as f:
        print(f.readable())  # 是否可读
        print(f.writable())  # 是否可写
        print(f.read())  # 一次性将文件全部读出来
    
    #输出结果
    True
    False
    AAAAAAAAAAAAAA
    
    Process finished with exit code 0

     演示2:

    with open(r'a.txt','r',encoding='utf-8') as f:
        print(f.readable())  # 是否可读
        print(f.writable())  # 是否可写
        print('>>>1:')
        print(f.read())  # 一次性将文件内容全部读出
        print('>>>2:')
        print(f.read())
        print('>>>:结束')# 读完一次之后,文件的光标已经在文件末尾了,再读就没有内容可读了
    #输出结果
    True
    False
    >>>1:
    AAAAAAAAAAAAAA
    BBBBBBBB
    >>>2:
    
    >>>:结束 

    演示3:

    with open(r'a.txt','r',encoding='utf-8') as f:
        print(f.readlines())  # 返回的是一个列表,列表中的一个个元素对应的就是文件的一行行内容
        print(f.read())
        print('>>>:结束')
    #输出结果
    ['AAAAAAAAAAAAAA
    ', 'BBBBBBBB']
    
    >>>:结束

    演示4:

    with open(r'a.txt',mode='r',encoding='utf-8') as f:
        print(f.readline())  # 只读取一行内容,读完本行后,光标跳到了下一行
        print(f.readline())
        print(f.readline())
        print(f.readline())
        print('>>>:结束')
    #输出结果
    AAAAAAAAAAAAAA
    
    BBBBBBBB
    
    
    >>>:结束

    演示5:

    with open(r'a.txt',mode='r',encoding='utf-8') as f:
        for i in f:  # f可以被for循环,没for循环一次,读一行内容
            print(i)  # 这个方法就可以解决大文件一次性读取占用内存过高的问题
    print('结束')
    #输出结果
    AAAAAAAAAAAAAA
    
    BBBBBBBB
    结束

     

  • 相关阅读:
    设置ImageView圆角
    GitHub-引导页
    GitHub-特效
    TextView总汇
    【笔记8-Redis分布式锁】从0开始 独立完成企业级Java电商网站开发(服务端)
    【笔记7-部署发布】从0开始 独立完成企业级Java电商网站开发(服务端)
    【笔记6-支付及订单模块】从0开始 独立完成企业级Java电商网站开发(服务端)
    【笔记5-购物车及地址模块】从0开始 独立完成企业级Java电商网站开发(服务端)
    【笔记4-商品模块】从0开始 独立完成企业级Java电商网站开发(服务端)
    【笔记3-用户模块】从0开始 独立完成企业级Java电商网站开发(服务端)
  • 原文地址:https://www.cnblogs.com/buzaiyicheng/p/11140628.html
Copyright © 2011-2022 走看看