zoukankan      html  css  js  c++  java
  • 文件的高级应用及修改的两种方式

    文件的高级应用及修改的两种方式

    一、文件的高级应用

    可读、可写

    • r+t: 可读、可写
    • w+t: 可写、可读
    • a+t: 可追加、可读
    # wt
    with open('36w.txt', 'wt', encoding='utf-8') as fw:
        print(fw.readable())
        print(fw.writable())
    False
    True
    # w+t
    with open('36w.txt', 'w+t', encoding='utf-8') as fw:
        print(fw.readable())
        print(fw.writable())
    True
    True
    # r+t
    with open('36w.txt', 'r+t', encoding='utf-8') as fr:
        print(fr.readable())
        print(fr.writable())
    True
    True
    

    文件内指针移动

    假设我们需要在文件内容中间的某一行增加内容,如果使用基础的r/w/a模式实现是非常困难的,因此我们需要对文件内的指针进行移动。

    with open('36r.txt', 'r+t', encoding='utf-8') as fr:
        fr.readline()
        fr.write('nick 真衰呀')  # 写在文件的最后一行
    

    硬盘上从来没有修改一说,硬盘上只有覆盖,即新内容覆盖新内容。

    1.seek(offset,whence): offset代表文件指针的偏移量,偏移量的单位是字节个数

    # seek()
    with open('36r.txt', 'rb') as fr:
        print(f"fr.seek(4, 0): {fr.seek(4, 0)}")  # 0相当于文件头开始;1相当于当前文件所在位置;2相当于文件末尾
        # fr.seek(0,2)  # 切换到文件末尾
    fr.seek(4, 0): 3
    

    2.tell(): 每次统计都是从文件开头到当前指针所在位置

    # tell()
    with open('36r.txt', 'rb') as fr:
        fr.seek(4, 0)
        print(f"fr.tell(): {fr.tell()}")
    fr.tell(): 4
    

    3.read(n): 只有在模式下的read(n),n代表的是字符个数,除此之外,其他但凡涉及文件指针的都是字节个数

    # read()
    with open('36r.txt', 'rt', encoding='utf-8') as fr:
        print(f"fr.read(3): {fr.read(3)}")
    fr.read(3): sdf
    

    4.truncate(n): truncate(n)是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate()要在r+或a或a+等模式下测试效果。它的参照物永远是文件头。并且truncate()不加参数,相当于清空文件。

    # truncate()
    with open('36r.txt', 'ab') as fr:
        fr.truncate(2) # 截断2个字节后的所有字符,如果3个字节一个字符,只能截断2/3个字符,还会遗留1/3个字符,会造成乱码
    
  • 相关阅读:
    HTML DOM 12 表格排序
    HTML DOM 10 常用场景
    HTML DOM 10 插入节点
    HTML DOM 09 替换节点
    HTML DOM 08 删除节点
    HTML DOM 07 创建节点
    022 注释
    024 数字类型
    005 基于面向对象设计一个简单的游戏
    021 花式赋值
  • 原文地址:https://www.cnblogs.com/wwbplus/p/11329875.html
Copyright © 2011-2022 走看看