zoukankan      html  css  js  c++  java
  • day--07

    文件with管理

    # 将文件的关闭交给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:
    U:

    # 借助读写,完成追加
    # 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)

    with完成文件复制

    # 借助读写,完成追加
    # 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)

    # 先读后写
    r = open('source.txt', 'r', encoding='utf-8')
    w = open('target.txt', 'w', encoding='utf-8')
    for line in r:  # 遍历就是一行一行读 取读文件的流
       w.write(line)
       w.flush()  # 将写入到内存中的数据刷新到硬盘中
    w.close()
    r.close()
    # 边读边写赋值
    with open('source.txt', 'r', encoding='utf-8') as f1:
       with open('target.txt', 'a+', encoding='utf-8') as f2:
           for line in f1:
               f2.write(line)

     

    游标操作

    `

    # 方法: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')
       # 案例
    with open('001.png', 'rb') as f:
       data = f.read()
    print(len(data))

    # 在大文件中,开头| 1/3 | 2/3 | 末尾 各取10个字节拼接成秒传的信息依据
    # 形成秒传规则
    tagData = b''
    with open('001.png', 'rb') as f:
       # 通过其他途径(sys模块)来获取文件总大小
       data = f.read()
       length = len(data)
       # 开头
       f.seek(0, 0)
       d1 = f.read(10)
       # 1/3
       f.seek(length // 3, 0)
       d2 = f.read(10)
       # 2/3
       f.seek(length // 3 * 2, 0)
       d3 = f.read(10)
       # 末尾
       f.seek(-10, 2)
       d4 = f.read(10)
       tagData = d1 + d2 + d3 + d4
    # 秒传依据
    print(tagData)

     

  • 相关阅读:
    自己实现迭代器
    Python基础教程(入门教程),30分钟玩转Python编程!!
    centos7安装python 与卸载python
    docker 批量导入本地 tar 镜像包的 sao 操作
    无线路由器信道怎么设置 无线路由器信道选择哪个好
    关于打包压缩几种格式(gzip,bzip2,xz)的试验对比
    linux 长期运行程序的 四种方法
    win10快捷键大全 win10常用快捷键
    linux bg和fg命令
    Apache htpasswd命令用法详解
  • 原文地址:https://www.cnblogs.com/king-home/p/10611240.html
Copyright © 2011-2022 走看看