Python基礎(檔案操作)
阿新 • • 發佈:2019-01-04
檔案讀取:
1 #檔案讀取方式一 2 f=open("a.txt","r+",encoding="utf8") 3 data=f.read() 4 print(data) 5 f.close() 6 7 #檔案讀取方式二 8 with open("a.txt","r+",encoding="utf8") as f: 9 data=f.read() 10 print(data)
檔案寫入:
1 #檔案寫入方式一 2 f=open("b.txt","w",encoding="utf8") 3 f.write("今天天氣很好!") 4 f.close() 5 6 #檔案寫入方式二 7 with open("a.txt","r+",encoding="utf8") as f: 8 data=f.write() 9 print(data)
標註**:使用with open() as f 方式讀寫資料時簡化了f.close()的步驟
檔案重新整理(flush):
1 with open("c.txt","r+",encoding="utf8") as f: 2 f.write("今夜難以入睡!") 3 f.flush()#將寫在記憶體中的內容重新整理到硬碟中
檔案tell方法:
描述:此方法返回該檔案中讀出的檔案/寫指標的當前位置。
1 with open("d.txt","r+",encoding="utf8") as f: 2 data=f.readline() 3 print(data) 4 print(f.tell()) #顯示當前游標所在的位置
檔案seek方法:
描述:seek()用於移動檔案讀取指標到指定位置。
格式:file.seek(offset,whence)
offset:開始的偏移量,也就是代表需要移動偏移的位元組數
whence:給offset引數一個定義,表示要從哪個位置開始偏移;0代表從檔案開頭開始算起,1代表從當前位置開始算起,2代表從檔案末尾算起。whence值為空沒設定時會默 認為0。
1 >>> f=open("aaa.txt","w") #以只寫的形式開啟一個叫做aaa.txt的檔案 2 >>> f.write("my name is liuxiang,i am come frome china") #寫入內容 3 >>> f.close() #關閉檔案 4 >>> f=open("aaa.txt","r") #以只讀開啟檔案 5 >>> f.read() #讀取內容 6 'my name is liuxiang,i am come frome china' 7 >>> f.seek(3,0) #“0”代表從檔案開頭開始偏移,偏移3個單位 8 >>> f.read(5) #從偏移之後的指標所指的位置(即“n”)開始讀取5個字元 9 'name ' 10 >>> f.tell() #顯示現在指標指在哪個位置(即“i”的位置) 11 >>> f.readline() #讀取這一行剩下的內容 12 'is liuxiang,i am come frome china' 13 14 15 16 >>> f.seek(0,2) #“2”代表從末尾算起,“0”代表偏移0個單位 17 >>> f.read() 18 '' #因為是從末尾算起,內容已結束。所以讀取內容為空
**seek方法讀取日誌檔案最後一行:
1 #日誌檔案 2 2018/12/23 kelvin login 登入淘寶 3 2018/12/25 Alex buy 購買商品 4 2018/12/28 kelvin buy 購買商品 5 2018/12/29 elvin login 登入網站 6 2018/12/29 kelvin nologin 退出登入 7 2018/12/31 bob foot 逛商城 8 2019/01/01 kelvin order 下單
1 with open("日誌檔案","rb") as f: 2 offset=-20 #定義一個偏移量用於在第一次倒序移動游標長度 3 while True: 4 f.seek(offset,2) #第一次倒序移動游標,移動長度為20個位元組 5 data=f.readlines() #讀取從移動後的游標到日誌結尾的每一行組成一個列表 6 if len(data)>1: #如果取出的檔案列表行數大於1,則說明肯定取到了最後一行 7 print(data[-1].decode("utf8")) #取出列表中的最後一行,即為日誌的最後一行 8 break 9 offset*=2 #如果取出的檔案列表小於等於1,則說明取出的最後一行日誌可能不完整,說明偏移量太小,因此擴大偏移量
遍歷檔案:
1 #Author : Kelvin 2 #Date : 2019/1/4 12:59 3 4 #第一種(不推薦使用,因為會將檔案所有內容載入到記憶體) 5 f=open("日誌檔案","r+",encoding="utf8") 6 for i in f.readlines(): 7 print(i) 8 9 #第二種(推薦使用,只會一行一行讀取,不會首先將所有檔案內容載入到記憶體中) 10 f=open("日誌檔案","r+",encoding="utf8") 11 for i in f: 12 print(i)