• 字符编码与文件操作2


    一、复习

    1、编码

    ASCII--->Python--->Unicode

    python2:默认ASCII,python:默认utf-8

    编码表:人识别的标识符与计算机识别的标识符形成的对应关系

    各编码表中字符(人能识别)所占字节(将字符转为二进制的中间产物)数

    一个字节=8个二进制位(1个十六进制位=4个二进制位)

    ASCII:1~2个字节

    Unicode:2个字节

    GBK:1~2个字节

    UTF-8:Unicode编码的一种体现方式,1~6个字节

    Unicode定长获取信息快速, UTF-8变长传输速度快

    2、三种字符串

    r’原义  字符串

    u’最普通的字符

    二进制字符串:用来传输的字符串

       1.是字符串(文本字符)的二进制体现,(如视频资源可以转化为二进制字符串,不翻转为视频资源,则就是普通字符串)

       2.二进制字符串按字节为最小单位存储单位存放数据

       3.所有数据转化为二进制字符串都应该用utf-8进行编码吗?

               ----只是文本数据

               ----视频、音频、图像等此类数据也有编码解码过程,采用的编码表不是utf-8,不用关心编                  码表

     字符与ASCII之间转化
    res = ord('A')
    print(res)
    res = chr(65)
    print(res)
    # ascii:DBCS双字节存储可以存放中文等一些文字与字符,可以完成字符与整数(ascii表中整数)的转化
    print(ord('⑩'), chr(9323))

    3、文件基础读写

          1.打开文件

    r = open('a.txt', 'r', encoding='utf-8')
    w = open('a.txt', 'w', encoding='utf-8')

          2.操作

    r.read()
    w.write('msg')

         3.关闭文件

    r.close()
    w.close()

    二、rw模式结合

    w:没有文件就新建文件,有则清空
    w = open('1.txt', 'w', encoding='utf-8')
    w.write('000 ')

    w.flush() 写一行刷一行
    如果文件存在会将写入文件的内容及时刷从内存刷到硬盘
      应用:在写入大量数据,要及时处理内存空间,不然内存可能溢出导致数据丢失
      w.write('111
    ')
      w.flush()   最后一次flush()操作可以省略

    一次性写入多行
    w.writelines(['222 ', '333 '])
    w.write('444')
    w.newlines
    w.write('555')

    w.close()
    1.将内存的的数据刷新到硬盘中;2.释放文件资源
    需求:
    1.完成文本类型的文件复制:1.txt => 11.txt
    r = open('1.txt', 'r', encoding='utf-8')
    w = open('11.txt', 'w', encoding='utf-8')
    for line in r: # 遍历就是一行一行读 取读文件的流
    w.write(line)
    w.flush()
    w.close()
    r.close()

    # 将文件的关闭交给with管理,当with中逻辑结束后,系统会自动释放文件
    with open('1.txt', 'r', encoding='utf-8') as r, open('source.txt', 'w', encoding='utf-8') as w:
    for line in r:
    w.write(line)
    w.flush()
    # w.close() 系统自动完成
    # r.close()

    三、文件操作模式

    r: 读
    w: 写(无创建,有清空)
    a: 追加(有创建的功能)

    t: 文本操作(默认模式) r=>rt w=>wt a=>at
    b: 非文本文件必须采用二进制模式来处理
    +: 可读可写
    r+: 不会创建文件的可读可写 | w+:创建清空文件的可读可写 | a+:创建不清空文件(追加)的可读可写

    x:写模式创建文件,如果文件已存在就抛出异常

    with open('1.txt', 'wt', encoding='utf-8') as f:
    f.write('666')

    借助读写,完成追加
    with open('1.txt', 'rt', encoding='utf-8') as f1:
    data = f1.read()
    data += '666'
    with open('1.txt', 'wt', encoding='utf-8') as f2:
    f2.write(data)

    a为写模式,在原数据后追加写入新数据
    with open('1.txt', 'a', encoding='utf-8') as f:
    f.write('777')

    四、非文本文件复制

    with open('333.mp4', 'rb') as f1:
    with open('666.mp4', 'wb+') as f2:
    for line in f1:
    f2.write(line)

    x:写模式,创建文件,如果文件以存在,就抛异常
    with open('000.txt', 'x', encoding='utf-8') as f:
    pass

    五、文件游标操作

    方法:seek(偏移量, 偏移位置)
    偏移量:移动的字节数,负数是结合模式1,2往前偏移
    偏移位置:
    -- 0 - 从文件开始位置开始偏移 | 1 - 从当前游标位置开始偏移 | 2 - 从文件末尾开始偏移
    b'你好1234567890'

    游标读
    with open('source.txt', 'rb') as f:
    d1 = f.read(11)
    print(d1)
    print(d1.decode('utf-8'))

    当前游标的位置
    print(f.tell())

    游标操作 - 从末尾位置开始
    f.seek(-3, 2)
    d2 = f.read()
    print(d2.decode('utf-8')) # 890

    游标操作 - 从当前位置开始
    f.seek(-3, 1)
    d2 = f.read()
    print(d2.decode('utf-8')) # 34567890

    游标操作 - 从头开始
    f.seek(3, 0)
    d2 = f.read()
    print(d2)
    print(d2.decode('utf-8')) # 好1234567890

    游标写:会覆盖书写
    with open('source.txt', 'rb+') as f:
    f.seek(11)
    print(f.read())
    f.write(b'000')

  • 相关阅读:
    常用DOS命令
    uCGUI窗口重绘代码分析
    STM32的FSMC总线驱动ili9341,掉电重启无法正常显示的问题
    再次编译 arm toolchains
    GDB和GDB Server
    QT Creator 环境使用 remote debug 调试 arm 程序
    [转]一个简洁的 systemd 操作指南
    用 bottle.py 写了个简单的升级包上传
    批量 ping 测试脚本(IP 扫描)
    float 对整形的取余运算
  • 原文地址:https://www.cnblogs.com/yangyinyin/p/10632300.html
Copyright © 2020-2023  润新知