zoukankan      html  css  js  c++  java
  • 040 文件的高级应用

    一、可读可写

    • r+t: 可读、可写
    • w+t: 可写、可读
    • a+t: 可追加、可读
    # r+t模式 可读可写(尽量不要使用)  
    with open('test.txt', 'r+', encoding='utf8') as fr: # r+ 在后面追加
        print(fr.readable())    # 是否可读 True
        data = fr.read()
        print(data)
        print(fr.writable())    # 是否可写 True
        fr.write('x = 10')      # 在后面追加内容
        print(fr.readable())    # 是否可读 True
        data = fr.read()        # 文件指针已经到了末尾,在读已经读不到数据
        print(data)
    
    # w+t模式 可写可读,但是当打开文件时,w的功能就会清空文件(更不要使用)
    with open('test.txt', 'w+', encoding='utf-8') as fw:    # 一打开就文件就被清空了
        print(fw.readable())    # True
        data = fw.read()
        print(data)     # 没有数据
        print(fw.writable())    # True
        fw.write('x = 10')      # 写数据
        data = fw.read()        # 文件指针已经到末尾,读不到数据
        print(data)
    
    # a+t模式 有追加的功能,a的指针在末尾,a+功能也没用
    with open('test.txt', 'a+', encoding='utf8') as fr:
        # fr.seek(1, 0)
        print(fr.readable())    # True
        data = fr.read()      # 指针在末尾,读不到数据
        print(data)
    
        print(fr.writable())    # True
        fr.write('x = 10')      # 写入数据
        fr.flush()              # 刷到内存中
        data = fr.read()  # 指针在末尾,读不到数据
        print(data)
    

    二、文件内指针移动

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

    2.1 seek(offset,whence): offset表示文件指针的偏移量,单位是字节

    # 文件指针的应用,移动指针
    # seek(按字节位移)   # 英文一个字节,中文两个字节
    with open('test.txt', 'rb') as fr:	# 需要使用rb模式
        fr.seek(1)  # 1表示位移1位,默认从文件头开始
        fr.seek(1, 0)  # 1表示偏移1位,0表示从头开始
        fr.seek(2, 1)  # 2表示偏移2位,1表示从当前位置开始
        fr.seek(-2, 2)  # -2表示向前偏移2位,2表示文件末开始
        print(fr.read())
    

    2.2 tell(): 统计从文件开头到当前文件指针的字节数

    with open('test.txt', 'r',encoding="utf8") as fr:
        fr.seek(0, 2)   # 移动到文件末尾
        print(fr.tell())	# 这样就能统计文件字节长度
    

    2.3 read(n): 读n个长度的字符,如果是字节就读取的是字节

    with open('test.txt', 'r',encoding="utf8") as fr:	# r模式
        print(fr.read(2))  # 读了2个字符
    with open('test.txt', 'rb') as fr:	# rb模式
        print(fr.read(2))  # 读了2个字节
    

    2.4 truncate(n):从n个字节处截取文件

    with open('test.txt', 'a',encoding="utf8") as fr:   # 使用追加模式
        fr.truncate(7)  # 截取文件,把7个字节后的东西全清空
    
  • 相关阅读:
    this 指向 及 调用方式
    页面布局上 左 右底部
    Thread Safety线程安全
    sql查删更
    LinuxMysql命令操作数据库
    excel链接sharepoint 用于 Excel 的 Microsoft Power Query
    W7无法更新
    发票点数计算
    sharepoint OWA问题解决
    zend studio 做前端推荐安装的插件
  • 原文地址:https://www.cnblogs.com/XuChengNotes/p/11321790.html
Copyright © 2011-2022 走看看