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 請輸入命令: