zoukankan      html  css  js  c++  java
  • Day 07 Day08 字符编码与文件处理

    1.字符编码: 只针对文字    ***

      1.字符编码表发展史: ASCII 码表 >>>> 各国自己语言的字符编码表>>>>万国码(unicode)

      2: ASCII表:用8个比特位表示(1个字节)一个英文字符。 

      3:gbk: 用2个字节来表示一个中文字符,还是用一个bytes 表示一个英文字符

      4:unicode: 统一用2个字节表示所有字符,兼容各国编码

        特点:(1)用户在输入时无论输入什么字符都兼容万国字符

           (2)其他国家编码的数据由硬盘读取到内存的时候unicode与其他各个国家的编码都有对应关系

        缺点: (1)浪费存储空间

           (2)io次数增加,程序运行速度降低(致命)

      5:重点:

        1:现在计算机内存都是unicode,硬盘是utf-8,当内存中的unicode格式编码的数据存到硬盘是,会将Unicode转换位utf-8编码格式来保存,其中中文字符为3个字节,英文字符为1个字节

        2:过程:

          1 数据由内存保存到硬盘

            内存中的Unicode格式的二进制数据     >>> 编码(encode)>>>>  utf-8格式的二进制数据

          2 数据又硬盘读取到内存:

            硬盘中的utf-8格式的二进制数据 >>> 解码(decode)  >>> Unicode格式的二进制数据

      6 :编码, 解码:

        1. 保证不乱吗就在于文件以什么编码形式保存。就以什么编码形式打开    (以什么编码编就以是什么编码解)

        2. 在python2中,将py文件读到解释器时默认用的是ASCII码,在python3中。默认的是utf-8码

      7 :文件头:

        

    # coding:utf-8  

        1.因为所有的编码都支持英文字符,所以文件头才能够正常生效

        2.基于Python解释器开发的软件,只要是中文,前面都需要加一个为了在python2当不指定文件头的时候,默认用ASCII存储数据,如果指定文件头那么就按照文件头的编码格式存储数据)

        3.python3中字符串默认就是unicode编码格式的二进制数

      8:注意:pycharm终端用的是utf-8格式,在windows终端用的是‘gbk'

      9:字节等关系:

            1B = 8Bytes

            1kb = 1024b

            1Mb = 1024 kb

            1GB = 1024 MB

            1TB = 1024 GB

            1PB = 1024 TB

    2.文件处理:

      1.什么是文件:系统暴露给用户操作复杂硬件的简易接口

      2.为什么操作文件:人或者应用程序需要永久的保留数据

      3.通过Python代码来操作文件:  操作完必须关闭文件。close()

    f = open(r'D:学习资料day08代码day08	est', mode='r', encoding='utf-8')
    print(f.read())
    f.close()
    
    '''
    通过python代码来操作文件
    1.open() : 打开文件
    2.r'  取消转义
    3.'D:学习资料day08代码day08	est' 文件的绝对路径  (可以写文件的相对路径)
          相对路径:必须有一个参照物 通常是相对于执行文件所在的文件夹
          绝对路径:类似与GPS定位,文件所在的详细路径
    4.mode 操作文件的方式。可省略不写,默认以’r'读的方式打开
    5.encoding=‘utf-8'  : 操作文件的编码方式
    6. f 变量名 一个对象 文件句柄
    7. f.read()  :将文件一次性都出来读取出来,如果文件过大会导致内存溢出
    8. f.close()  :告诉操作系统关闭打开的文件
    '''

      4.  文件上下文管理:操作完自动关闭打开的文件

    with open(r'D:学习资料day08代码day08	est',mode='r',encoding='utf-8') as f:
        print(f.read())

      5.文件的打开方式:(mode 参数)

      6:操作文件单位的方式:

         t :  文本文件。在使用的时候需要指定encoding参数,若不指定则以系统默认编码方式打开

        b :  二进制文件。 在使用时候哟东不能指定encoding参数,通常用于打开视频音频等文件,或者用与传输文件

      7:只读:(r)文件不存在的情况下 直接报错,文件存在的情况下 光标在文件开头

    with open(r'D:学习资料day08代码day08	est',mode='r',encoding='utf-8') as f:
        print(f.readable())  # True 是否可读
        print(f.writable())  # False  是否可写
        print(f.read())  # ahjkjh
     哈佛看 
     围殴日哦 
     啊JFK蓝  将文件一次读出
        print(f.read())  # 没有内容  因为当文件读取完国标移动到末尾
        f.seek(0, 0)  # 将鼠标移动到开始
        print(f.readline())  # ahjkjh  一行一行的读取文件
        print(f.readline())  # 哈佛看
        f.seek(0, 0)  # 将鼠标移动到开始
        print(f.readlines())  # ['ahjkjh
    ', '哈佛看
    ', '围殴日哦
    ', '啊JFK蓝'] 返回的是一个列表,将文件中的一行行内容作为元素添加到列表中
    with open(r'D:学习资料day08代码day08	est', mode='r', encoding='utf-8') as f:
        for line in f:  # f 可以被for循环,每次读取一行内容
            print(line)  # 可以解决读取大文件的问题,内存始终只有一行内容

       8:只写:(w)文件不存在的情况下 自动创建新文件,文件存在的情况下 先清空文件内容再执行写入

    with open(r'D:学习资料day08代码day08	est', mode='w', encoding='utf-8') as f:
        f.write('hello')

      9. 只追加:(a)文件不存在的情况下 自动创建新文件,文件存在的情况下,不清空内容。光标移动到末尾

    with open(r'D:学习资料day08代码day08	est', mode='a', encoding='utf-8') as f:
        f.write('你好')  # 末尾追加

      10.光标:(seek)    

        1.在rt模式下 read内的数字 表示的是字符的个数

        2.除此之外,数字表示的都是字节

        3.f.seek(offset,whence)

          offset:相对偏移量 光标移动的位

          whence:

            0:参照文件的开头   t和b都可以使用
        1:参照光标所在的当前位置 只能在b模式下用
        2:参照文件的末尾 只能在b模式下使用 
     
      11.截取片段
    with open(r'test', 'a', encoding='utf-8') as f:
        f.truncate(6)  # 接收的字节的长度 整型
        # 保留0~6字节数 后面的全部删除(截断)

       12. 监测文件内容

    with open(r'test01.txt', 'rb') as f:
        # 先将光标移动到文件末尾
        f.seek(0, 2)
        while True:
            res = f.readline()
            if res:
                print("新增的文件内容:%s" % res.decode('utf-8'))
                # 说明有人操作当前文件
         

      13.修改文件:

        1:

    # 将数据读取到内存中
    # 在内存中修改
    # 覆盖原文件
    with open(r'D:学习资料day08代码day08
    es', 'r', encoding='utf-8') as f:
        content = f.read()
    
    with open(r'D:学习资料day08代码day08
    es', 'w', encoding='utf-8') as f1:
        new_content = content.replace('小明', '小红')
        f1.write(new_content)

        2:

    # 创建一个新文件
    # 将源文件循环修改然后写到新文件中
    # 删除原文件,将新文件命名成原文件名
    
    import os
    
    with open(r'D:学习资料day08代码day08
    es', 'r', encoding='utf-8') as f, 
            open(r'D:学习资料day08代码day08
    es.bar', 'a', encoding='utf-8') as f1:
        for line in f:
            f1.write(line.replace('小红', '小明'))
    os.remove(r'D:学习资料day08代码day08
    es')  # 删除原文件
    os.rename(r'D:学习资料day08代码day08
    es.bar', r'D:学习资料day08代码day08
    es')  # 重命名文件
     
     

     

  • 相关阅读:
    配置通过Console口登录交换机/路由器
    (十二)20大5G关键技术
    (十一)关于5G发展的28个核心问题,来自华为内部的深度解读
    (十)5G关键技术——Massive MIMO(大规模天线阵列)和beamforming(波束成形)
    (九)什么是5G
    (四)circularly symmetric complex zero-mean white Gaussian noise(循环对称复高斯噪声)
    小小知识点(十四)显示屏与主机之间连接,出现无信号字样时,应检查是否正确选择集显和独显VGA接口
    小小知识点(十三)如何修改PPT母版上无法直接点击修改的文字
    小小知识点(十二)利用MATLAB计算定积分
    小小知识点(十一)护眼色豆沙绿的设置
  • 原文地址:https://www.cnblogs.com/yanglingyao/p/11142003.html
Copyright © 2011-2022 走看看