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 请输入命令:
下一篇: c++-文件分离