• 字符编码和文件处理


      """
    1.运行程序的三个核心硬件
    cpu
    内存
    硬盘

    任何一个程序要想运算,必选先有硬盘加载到内存,然后cpu去内存取指执行
    运行着的应用程序产生的数据 必先存在内存

    2.python解释器运行一个py文件(xxx.py)步骤
    1.将python解释器的代码由硬盘读到内存
    2.将xxx.py以普通文本文件形式读到内存
    3.python读取文件内容 识别python语法 执行相应操作
    ps:普通的文本编辑器与python解释器前两步都是一样的

    """
    一、字符编码:
     
     
    1.字符编码针对的是文字,也就意味只和文本文件有关,和视频、音频文件无关。
      
      2、文本编辑器的输入和输出是两个过程。

        人在操作计算机的时候输入的是人能够看懂的字符,
    但是计算机只能识别010101这样的二进制数据,
        那么输入的字符   >>>(字符编码表)>>>   二进制数字
      
      3、字符编码表就是字符与数字的对应关系

      
      4、

         ASCII码表  用八位二进制表示一个英文字符 所有的英文字符+符号最多也就在125位左右
         GBK     用2Bytes表示一个中文字符 还是用1Bytes表示一个英文字符  最多能表示65535个字符
         万国码unicode 统一用2Bytes表示所有的字符
         缺点:1.浪费存储空间;2.io次数增减,程序运行效率降低(致命)
      
      5、当内存中的unicode编码格式数据存到硬盘的时候,会按照utf-8编码(unicode transformation format)

        unicode的两个特点 (需要掌握)
          1、用户在输入的时候,无论输什么字符都能够兼容万国字符
          2、其他国家编码的数据由硬盘读到内存的时候unicode与其他各个国家的编码都有对应关系
         数据由内存保存到硬盘(必须掌握)
          内存中的unicode格式二进制数字 >>>编码(encode)>>>  utf-8格式的二进制数据    
         硬盘中的数据由硬盘读到内存  >>>解码(decode)>>>   内存中unicode格式的二进制数据
       ps:保证不乱码在于  >>>  文本文件以什么编码编的就以什么编码解   
          python2 解释器默认使用ASCII码
          python3 解释器默认使用utf-8
        
    6、文件名

          # coding:utf-8
            1、因为所有编码都支持英文字符,所以文件头才能正常生效
          给予python解释器开发的软件,只要是中文,前面都需要加一个u,
          为了的就是讲Python2(当你不指定文件头的时候,默认ASCII存储数据,如果指定文件头那么就按照文件头的编码格式存储数据)

          python3中字符串默认就是unicode编码的二进制数
        补充:
           1、pycharm终端用的是utf-8格式
           2、Windows终端采用的是GBK
        ps:乱码的原因:字符不能够正常显示,多数编码不一致。
          八位二进制也叫8bit(******)       8bit = 1Bytes       1024Bytes = 1KB       1024KB = 1MB       1024MB = 1GB       1024GB = 1TB       1024TB = 1PB       ....
      重点:
        字符编码表总结
    x = ''
    res1 = x.encode('gbk')  # 将unicode编码成可以存储和传输的utf-8的二进制数据
    print(res1)  # b'\xe4\xb8\x8a'
    # bytes类型  字节串类型  你就把它当成二进制数据即可
    res2 = res1.decode('gbk')  # 将硬盘中的utf-8格式的二进制数据解码成unicode格式的二进制数据
    print(res2)   
    # 第一种转换方式
    res1 = bytes(x,encoding='utf-8')
    print(res1,type(res1))
    res2 = str(res1,encoding='utf-8')
    print(res2,type(res2))
    
    # 第二种转换方式
    res = x.encode('utf-8')
    print(type(res))
    print(res.decode('utf-8'))

    二、文件处理:

      1、什么是文件?

        操作系统提供给用户操作复杂硬件(硬盘)的简易的接口

      2、为什么操作文件

        人或者应用程序需要永久的保存数据

      ps:python代码操作文件

        f = open(文件路径,mode='读写模式' , encoding='utf-8')

        f.close()

        print(f)

        f:遥控器     文件句柄

      3、如何用?

        f = open()

        f.read()

        f.close()

    '''
    通过python代码操作文件
     r 取消转义
     f = open(r'文件路径',encoding='utf-8')  # 向操作系统发送请求  打开某个文件
    # # 应用程序要想操作计算机硬件 必须通过操作系统来简介的操作
    print(f)  # f是文件对象
    print(f.read())  # windows操作系统默认的编码是gbk
    f.read()  # 向操作系统发请求 读取文件内容
    f.close()  # 告诉操作系统 关闭打开的文件
    print(f)
    print(f.read())
    '''
    # 文件上下文操作
    with open(r'文件路径',encoding='utf-8') as f ,\
            open(r'文件路径,encoding='utf-8') as f1:  # f仅仅是一个变量名 你把它看成是一个遥控器
        print(f)
        print(f.read())
        print(f1)
        print(f1.read())

      4、

      4.1、文件的上下文管理

          with open(....) as f:        

        文件操作文件路径:

          相对路径:必须有一个参照物 通常是相对于执行文件所在的文件夹

          绝对路径:类似于GPS全球定位,不需要有任何的参照物

        r用来取消转义:

          r'D:av\ttt\xxx\ooo\rrr'

        mode不写默认用的是rt  (下文操作方式有写)

        encoding参数只在mode位文本模式的情况下才加

      4.2、文件打开的模式:

        r 只读模式:

          r 模式在打开文件的时候, 如果文件不存在 ,直接报错。

        w 只写模式:

           w模式一定要慎用

          1.文件不存在的情况下, 自动创建该文件。

          2.当文件存在的情况下, 会先清空文件内容再写入。

        a 追加模式:

          1.当文件不存在的情况下 自动创建该文件。

          2.当文件存在的情况下,不清空文件内容, 文件的光标会移动文件的最后

      5、操作文件单位的方式

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

        b 二进制文件   一定不能指定encoding参数

        mode参数 可以不写 ,不写的话默认是r t (只读文本文件)  这个t不写默认就是t

       例如: 
    with open(r'文件索引',mode='r',encoding='utf-8') as f:
            print(f.readable())  # 是否可读
            print(f.writable())  # 是否可写
            print(f.read())  # 一次性将文件内容全部读出
        
            print(f.readlines())  # 返回的是一个列表  列表中的一个个元素对应的就是文件的一行行内容
            for line in f:  # f 可以被for循环 每for循环依次 读一行内容
            print(line)  # 这个方法 就可以解决大文件一次性读取占用内存过高的问题
            print(f.readline())  # 只读取文件一行内容                  

       6、文件内光标移动:

        ps:在rt模式下,read内的数字,表示的是字符的个数,除此之外,数字表示的都是字节。

        1、f.seek(offset,whence)
          offset:相对偏移量 光标移动的位数
          whence:
            0:参照文件的开头,t和b都可以使用
            1:参照光标所在的当前位置,只能在b模式下使用
            2:参照文件的末尾,只能在b模式下使用 ps:(-5,2)表示倒着读5个Bytes
    with open(r'test','rt',encoding='utf-8') as f:
        print(f.read(1))
        f.seek(6,0)  # seek移动都是字节数 表示6个字节
        f.seek(3,0)  # seek移动都是字节数 从头开始读3个字节
        print(f.read(1))    # 往后读一位文本字符

            ps:换行占2个字节(Bytes);

         2、f.truncate()  截断文件内容     # 接受的字节的长度,整型。

    with open(r'test','a',encoding='utf-8') as f:
        f.truncate(6)  
        # 保留0~6字节数 后面的全部删除(截断)

         3.检测文件是否被修改

          打开文件,利用f.seek(0,2)将光标移动到文件末尾

          利用while循环

            再利用readline()来读取末尾内容

            通过if判断看readline()是否有值 ,有值说明文件新增了内容

            通过字符串的格式化输出将新增的文件内容输出给检测程序

          ps:  查看当前光标移动了多少字节            f.tell()

            将内存中的文件内容直接刷到硬盘          f.flush()

          

          





  • 相关阅读:
    ServerSuperIO 3.5版本的体系结构,以及未来规划的几点思考
    《连载 | 物联网框架ServerSuperIO教程》- 18.集成OPC Client,及使用步骤。附:3.5 发布与更新说明。
    《连载 | 物联网框架ServerSuperIO教程》- 17.集成Golden实时数据库,高并发保存测点数据。附:3.4 发布与版本更新说明。
    《连载 | 物联网框架ServerSuperIO教程》- 16.集成OPC Server,及使用步骤。附:3.3 发布与版本更新说明。
    [祝贺] 东方国信集团的钢铁大数据和工业节能两个案例入选工信部工业互联网优秀案例
    《连载 | 物联网框架ServerSuperIO教程》- 15.数据持久化接口的使用。附:3.2发布与版本更新说明。
    物联网建设中通讯互联层的终极解决方案
    hadoop 2.7.2 + zookeeper 高可用集群部署
    开源物联网框架ServerSuperIO 3.0正式发布(C#),跨平台:Win&Win10 Iot&Ubuntu&Ubuntu Mate,一套设备驱动跨平台挂载,附:开发套件和教程。
    《连载 | 物联网框架ServerSuperIO教程》- 14.配制工具介绍,以及设备驱动、视图驱动、服务实例的挂载
  • 原文地址:https://www.cnblogs.com/xiaowangba9494/p/11139653.html
Copyright © 2020-2023  润新知