欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-10 12:40:13
2020Python作业八——文件处理3—b模式的文件读写操作 @2020.3.16 #1、通用文件copy工具实现 #2、基于seek控制指针移动,测试r+、w+、a+模式下的读写内容 r(默认的操作模式):只读模式,当文件不存在时报错,当文件存在时文件指针跳到开始位置 w:只写模式,当文件不存在 ......

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('{}\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

请输入命令: