• 七、文件操作(2)


    rt文本模式下:
    read()里面数字,表示字符的个数,
    # 无论是r,w,a,模式只要没有加b,都是默认为文本模式rtwtat,里面参数都是字符个数
    # 除此之外,数字表示的都是字节,中文一个为三字节,字母为1字节(utf—8)

    # with open('text.txt','r',encoding='utf-8') as f:
    # print(f.read(5))

    # with open(r'D:codeday8文件操作 ext.txt', 'rb') as f:
    # res = f.read(3) # 读的是三个字节bytes
    # print(res) # b'fsd' 二进制存储的数据
    # print(res.decode('utf-8')) # 把原生二进制转为utf-8来读取


    一.文件内光标的移动
    """
    f.seek(offset,whence)
    offset:相对偏移量 光标移动的位数
    whence:
    0:参照文件的开头 t和b都可以使用
    1:参照光标所在的当前位置 只能在b模式下用
    2:参照文件的末尾 只能在b模式下使用
    """
    with open(r'D:codeday8文件操作 ext.txt', 'rt', encoding='utf-8') as f:
    print(f.read(1))
    f.seek(6,0)
    # # # # seek移动都是字节数
    # # # # f.seek(4,0) # seek移动都是字节数
    print(f.read(1))
    # f.seek(0,0)
    # print(f.read(1))
    # f.seek(0, 0)
    # print(f.read(1))
    # f.seek(6,0)
    # print(f.read())


    # with open(r'test','rb') as f:
    # print(f.read(3).decode('utf-8'))
    # f.seek(0,0)
    # print(f.read(3).decode('utf-8'))
    # f.seek(7,0)
    # print(f.read(1).decode('utf-8'))
    # # f.seek(6,0) # seek移动都是字节数
    # # f.seek(4,0) # seek移动都是字节数

    # with open(r'test','rb') as f:
    # print(f.read(3).decode('utf-8'))
    # f.seek(3,1)
    # print(f.read(1))
    # f.seek(6,0) # seek移动都是字节数
    # f.seek(4,0) # seek移动都是字节数


    # with open(r'test','rb') as f:
    # print(f.read())
    # f.seek(-4,2) # -4代表文件向左移动4个字节
    # print(f.read().decode('utf-8'))

    二.截断文件
    with open(r'test','a',encoding='utf-8') as f:
    f.truncate(6) # 接收的字节的长度 整型6
    # 保留6字节数 后面的全部删除(截断)

    三. 修改文件
    # 先将数据由硬盘读到内存(读文件)
    # 在内存中完成修改(字符串的替换)
    # 再覆盖原来的内容(写文件)
    # with open(r'test02.txt','r',encoding='utf-8') as f:
    # data = f.read()
    # print(data)
    # print(type(data))
    #
    # with open(r'test02.txt','w',encoding='utf-8') as f:
    # res = data.replace('egon','jason')
    # print(data)
    # f.write(res)

    """
    优点:任意时间硬盘上只有一个文件 不会占用过多硬盘空间
    缺点:当文件过大的情况下,可能会造成内存溢出
    """

    # 文件修改方式
    # 创建一个新文件
    # 循环读取老文件内容到内存进行修改 将修改好的内容写到新文件中
    # 将老文件删除 将新文件的名字改成老文件名
    import os

    with open(r'test02.txt', 'r', encoding='utf-8') as read_f,
    open(r'test02.swap', 'a', encoding='utf-8') as write_f:
    for line in read_f:
    new_line = line.replace('jason', 'egon')
    write_f.write(new_line)
    os.remove('test02.txt')
    os.rename('test02.swap', 'test02.txt')

    """
    优点:内存中始终只有一行内容 不占内存
    缺点:再某一时刻硬盘上会同时存在两个文件

    四、检车文件内容
    with open(r'test01.txt','rb') as f:
    # 先将光标移动到文件末尾
    f.seek(0,2)
    while True:
    res = f.readline()
    # 查看光标移动了多少位 bytes
    # print(f.tell())
    if res:
    print("新增的文件内容:%s"%res.decode('utf-8'))
    # 说明有人操作当前文件
    # else:
    # # 说明文件没有被任何人操作
    # print('暂无其他人操作该文件')


  • 相关阅读:
    zzulioj1908: 小火山的围棋梦想
    zzulioj1913: 小火山的计算能力
    zullioj1905: 小火山的跳子游戏
    HDU 1025:Constructing Roads In JGShining's Kingdom
    HDU 1257:最少拦截系统
    HDU1051:Wooden Sticks
    HDU1950:Bridging signals
    HDU1087:Super Jumping! Jumping! Jumping!
    HDU5256: 序列变换
    3.SpringBoot配置文件以及自动配置原理
  • 原文地址:https://www.cnblogs.com/wukai66/p/11152532.html
Copyright © 2020-2023  润新知