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 请输入命令: