1、文件操做的經常使用方法:函數
一、read():從光標位置開始讀取整個文件剩下的內容,注意是從光標位置開始,不必定是讀取整個文件。spa
#第一次讀取: f=open('test.txt','r') print(f.read()) f.close() #自恐多情損梵行,入山又怕誤傾城.世間安得雙全法,不負如來不負卿. 做者:倉央嘉措 #第二次讀取 f=open('test.txt','r') f.readline() print(f.read()) #做者:倉央嘉措 f.close()
二、readline和readlines的區別:指針
#readline()只讀取一行,而後光標移動到下一行 f=open('test.txt','r') print(f.readline()) #自恐多情損梵行,入山又怕誤傾城.世間安得雙全法,不負如來不負卿. print(f.readline()) #做者:倉央嘉措 f.close() #readllines()讀取整個文件,而後把每一行當成一個元素存成一個列表。注意每一個元素後後帶有換號符 f=open('test.txt','r') print(f.readlines()) #['自恐多情損梵行,入山又怕誤傾城.世間安得雙全法,不負如來不負卿.\n', '做者:倉央嘉措\n'] f.close() #最後說明一點:readlines是把真個文件都一次性讀寫到內存中,若是文件小還好,一旦文件大了,會要命。文件大可使用下面這種方法來讀寫: with open('test.txt','r') as f: for line in f: print(line.strip()) #這樣讀寫的好處就是一行一行讀,而且讀完就釋放,徹底不佔用內存。
三、write,writelinescode
f.write('1111\n222\n') #針對文本模式的寫,須要本身寫換行符 f.write('1111\n222\n'.encode('utf-8')) #針對b模式的寫,須要本身寫換行符 f.writelines(['333\n','444\n']) #文件模式 f.writelines([bytes('333\n',encoding='utf-8'),'444\n'.encode('utf-8')]) #b模式
四、其餘方法:blog
f.readable() #文件是否可讀 f.writable() #文件是否可讀 f.closed #文件是否關閉 f.encoding #若是文件打開模式爲b,則沒有該屬性 f.flush() #馬上將文件內容從內存刷到硬盤 f.name #文件名
2、文件光標的移動:ip
一、read(n)當文件打開方式爲文本模式時,表明讀取n個字符,文件打開方式爲b模式時,表明讀取n個字節內存
#一、以文本模式讀取 with open('test.txt','r') as f: print(f.read(4)) #自恐多情 #二、以字節模式讀取: with open('test.txt','rb') as f: print(f.read(4).decode('gbk')) #自恐 #直接輸出:print(f.read()) 輸出爲 b'\xd7\xd4\xbf\xd6'
二、tell() 獲取當前文件指針所在的位置,沒參數。以字節方式計算返回utf-8
with open('test.txt','r') as f: print(f.read(4)) #自恐多情 print(f.tell()) #8
三、seek() 做用:用於移動文件讀寫指針到指定位置。rem
#函數的原型是:file.seek(offset,whence=0) offset是指偏移量,whence有三個值,0,1,2。0表明移動到文件開頭,1,指當前位置,2指文件末尾。 缺省則使用默認值0. #注意:使用參數1,2必須在字節模式b下打開文件! with open('test.txt','r') as f: print(f.read(4)) #自恐多情 print(f.tell()) #8 f.seek(0,0) #返回開頭 print(f.read(4)) #自恐多情 with open('test.txt','rb') as f: print(f.read(4).decode('gbk')) #自恐 f.seek(-4,1) print(f.read(4).decode('gbk')) # 自恐 with open('test.txt','rb') as f: f.seek(-4,2) print(f.read(4).decode('gbk')) #嘉措
2、文件的修改:原型
實際上咱們平時說得修好某個文件的某個地方,實際是本質上並非直接修改文件,而是覆蓋。文件的數據是存放於硬盤上的,於是只存在覆蓋、不存在修改這麼一說,咱們平時看到的修改文件,都是模擬出來的效果,咱們能夠用下面的代碼來模擬這過程。
import os with open('test.txt','r') as f ,open('test_1.txt','w') as f1: for line in f: line=line.replace('自恐多情損梵行,入山又怕誤傾城.世間安得雙全法,不負如來不負卿.',\ '不恐多情損梵行, 惟恐入山誤傾城.世間安得雙全法,寧負如來不負卿.') line=line.replace('倉央嘉措','喲,寫bug呢??') f1.write(line) os.remove('test.txt') os.rename('test_1.txt','test.txt')