VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > Python基础教程 >
  • 2020Python作业八——文件处理3—b模式的文件读写操作

 

#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('{}\n'.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('{}\n'.format(cmd), encoding='utf-8'))
#        创建日志之后,日志还在要求 输入命令,可继续输入内容


请输入命令:猫爱米粒
请输入命令:米粒爱猫
请输入命令:来日方长,未来可期
请输入命令:tail -f access.log
猫爱米粒
米粒爱猫
来日方长,未来可期
tail -f access.log


相关教程