python-13:文件操作 之二
阿新 • • 發佈:2018-10-12
文本模式 文件的 str 使用 復制代碼 區別 for offset with open
一、文件操作的常用方法:
1、read():從光標位置開始讀取整個文件剩下的內容,註意是從光標位置開始,不一定是讀取整個文件。
#第一次讀取: f=open(‘test.txt‘,‘r‘) print(f.read()) f.close() #自恐多情損梵行,入山又怕誤傾城.世間安得雙全法,不負如來不負卿. 作者:倉央嘉措 #第二次讀取 f=open(‘test.txt‘,‘r‘) f.readline() print(f.read()) #作者:倉央嘉措 f.close()
2、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()) #這樣讀寫的好處就是一行一行讀,並且讀完就釋放,完全不占用內存。
3、write,writelines
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模式
4、其他方法:
f.readable() #文件是否可讀 f.writable() #文件是否可讀 f.closed #文件是否關閉 f.encoding #如果文件打開模式為b,則沒有該屬性 f.flush() #立刻將文件內容從內存刷到硬盤 f.name #文件名
二、文件光標的移動:
1、read(n)當文件打開方式為文本模式時,代表讀取n個字符,文件打開方式為b模式時,代表讀取n個字節
#1、以文本模式讀取 with open(‘test.txt‘,‘r‘) as f: print(f.read(4)) #自恐多情 #2、以字節模式讀取: with open(‘test.txt‘,‘rb‘) as f: print(f.read(4).decode(‘gbk‘)) #自恐 #直接輸出:print(f.read()) 輸出為 b‘\xd7\xd4\xbf\xd6‘
2、tell() 獲取當前文件指針所在的位置,沒參數。以字節方式計算返回
with open(‘test.txt‘,‘r‘) as f: print(f.read(4)) #自恐多情 print(f.tell()) #8
3、seek() 作用:用於移動文件讀寫指針到指定位置。
#函數的原型是: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‘)) #嘉措
二、文件的修改:
實際上我們平時說得修好某個文件的某個地方,實際是本質上並不是直接修改文件,而是覆蓋。文件的數據是存放於硬盤上的,因而只存在覆蓋、不存在修改這麽一說,我們平時看到的修改文件,都是模擬出來的效果,我們可以用下面的代碼來模擬這過程。
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‘)
python-13:文件操作 之二