• 2020Python练习八——文件处理3—b模式的文件读写操作


    2020Python练习八——文件处理3—b模式的文件读写操作

    @2020.3.16

    #1、通用文件copy工具实现 

    src_file=input('请输入源文件路径>>: ').strip()
    dst_file=input('请输入副本文件保存路径>>: ').strip()
    with open(r'{}'.format(src_file),mode='rb') as f1,
        open(r'{}'.format(dst_file),mode='wb') as f2:
        for line in f1:
            f2.write(line)

    #2、基于seek控制指针移动,测试r+、w+、a+模式下的读写内容 

     r(默认的操作模式):只读模式,当文件不存在时报错,当文件存在时文件指针跳到开始位置

    # r+
    with open('user.txt',mode='r+b') as f1:
        print(f1.read())
        f1.seek(0,0)
        # f1.write('Mili')  #TypeError: a bytes-like object is required, not 'str'
        # f1.write(bytes('Mili'))  #TypeError: string argument without an encoding
        f1.write(bytes('Mili',encoding='utf-8'))#此处将前四个字符改写成Mili,此时指针在第5个字符的位置,即索引4
        print(f1.tell())
        print(f1.read()) #指针从第五个字符开始读取剩余的字符
        print(f1.tell())

    b'MiliLoveYou'
    4
    b'LoveYou'
    11

     w:只写模式,当文件不存在时会创建空文件,当文件存在会清空文件,指针位于开始位置

    #user.txt——MiliLoveYou
    with open('user.txt',mode='w+b') as f2:
        f2.seek(0, 0)
        print(f2.read())# 此时文件里面的内容已被清空
        f2.write(bytes('CatsLoveYou',encoding='utf-8'))
        f2.seek(0, 0)
        print(f2.read())#新的内容CatsLoveYou写入之前已被清空的文件
        f2.seek(4, 0)
        print(f2.tell())#tell()得到指针的位置
        print(f2.read()) #指针从第五个字符开始读取剩余的字符
        print(f2.tell())
    b
    '' b'CatsLoveYou' 4 b'LoveYou' 11

     a:只追加写,在文件不存在时会创建空文档,在文件存在时文件指针会直接调到末尾

    # user.txt——CatsLoveYou
    with open('user.txt',mode='a+b') as f3:
        f3.seek(0, 0)
        print(f3.read())#读取原内容 CatsLoveYou
    
        f3.write(bytes('MiliLoveYou',encoding='utf-8'))
        f3.seek(0, 0)
        print(f3.read())#在末尾添加新内容,最后输出CatsLoveYouMiliLoveYou
    
        f3.seek(4, 0)
        print(f3.tell())
        print(f3.read()) #指针从第五个字符开始读取剩余的字符
        print(f3.tell())
    b
    'CatsLoveYouMiliLoveYou' b'CatsLoveYouMiliLoveYouMiliLoveYou' 4 b'LoveYouMiliLoveYouMiliLoveYou' 33

    #3、tail -f access.log程序实现

    tag = True
    while tag:
        cmd = input('请输入命令:').strip()
        if cmd == 'tail -f access.log':
            with open(r'access.log', 'a+b') as f:
                #如果指令为tail -f access.log,没有access.log文件,a模式下则会新建该文件,并将后面输入的内容写入文件中
                f.write(bytes('{}
    '.format(cmd), encoding='utf-8'))
                f.seek(0, 0)
                log = f.read().decode('utf-8')
                print(log)
            continue
        else:
            #如果指令不是tail -f access.log,则会持续要求输入命令,直到指令为tail -f access.log
            # 才会创建access.log文件,并将之前输入的所有指令(包括tail -f access.log)写入access.log
            with open(r'access.log', 'ab') as f:
                f.write(bytes('{}
    '.format(cmd), encoding='utf-8'))
    #        创建日志之后,日志还在要求 输入命令,可继续输入内容
    
    
    请输入命令:猫爱米粒
    请输入命令:米粒爱猫
    请输入命令:来日方长,未来可期
    请输入命令:tail -f access.log
    猫爱米粒
    米粒爱猫
    来日方长,未来可期
    tail -f access.log
    
    请输入命令:
  • 相关阅读:
    Andriod 简介
    Java 记录日志
    Java 国际化
    Java 正则表达式的使用
    Java 日期、时间类,日期、时间的格式化
    Java Random类、ThreadLocalRandom类
    Java Math类、BigDecimal类、NumberFormat类、浮点数的精确度问题
    Java String类、StringBuilder类、StringBuffer类
    Java System类、RunTime类、Object类、垃圾回收
    span 右浮动折行 解决ie6/7中span右浮动折行问题
  • 原文地址:https://www.cnblogs.com/bigorangecc/p/12504419.html
Copyright © 2020-2023  润新知