之前總聽別人說,把文件改爲只讀模式,也常常在文件屬性中看到,是'只讀',今天終於瞭解到一些相關的文件操做python
r 只讀 r+ 讀+寫 w 覆蓋寫 w+ 先覆蓋再寫,而後再讀 a 追加 a+ 追加讀 只讀: mode = "r"或"rb",讀文件r 讀字節rb
參數1:文件的名字,(必須是字符串)
參數mode:對這個文件的操做方式(模式)
參數encoding: 這個文件的編碼集
f 文件句柄.全部對於文件的操做,都是操做文件句柄
絕對路徑: 從磁盤查找額就是絕對路徑
相對路徑: 相對於某個文件的位置(推薦寫法)
存放文件路徑也必須是字符串類型,所有替換雙斜槓,若是文件路徑過長,在路徑前加一個r,和\\同樣,都是轉義ide
f.read( ) 讀, 一次性所有讀取;若是文件過大,就會很是佔用資源,致使內存崩潰
f.readline( ) 讀取一行,可是尾部有一個\n(換行符);只用在讀的時候最後加一個strip()就能夠解決
f.readlines( ) 一行一行讀取,,讀取多行,都存放在列表裏
for循環讀 每一次循環只在內存中佔一行數據,很節省內存
f = open('t1',mode = 'r',encoding = 'utf-8') mode = 'r',只讀模式 read(),括號裏的參數若是是單數,就表明讀取的字符數量,例如read(3),就是讀取前三個字 f = open('t1',mode = 'rb') mode = 'rb', 讀取字節時不能指定編碼集; read(3)在當前模式下,是讀取三個字節
利用w 模式操做文件,若是文件不存在,就新建一個;mode = "w"或"wb" 寫文件: w 寫字節: wb (只寫,沒有讀的功能)編碼
f.write("新內容"),覆蓋寫,在寫以前把文件清空spa
mode = 'a', 在文件的末尾位置添加內容code
r + 讀+寫 w + 寫+讀 a + 追加+讀 f = open('t1',mode = 'r+',encoding = 'utf-8') 先讀後寫 f = open('t1',mode = 'w+',encoding = 'utf-8') 先寫後讀
f.seek() 移動光標位置,先寫後讀時光標默認是在最後,讀取時須要把光標移動到最前面
例:blog
f = open('t1',mode = 'w+',encoding = 'utf-8') f.write("寫的內容") f.seek( ) 移動光標位置 print(f.read())
f = open('t1',mode = 'a+',encoding= 'utf-8') 追加寫+讀
f.seek(0)
print(f.read())ip
f.write('')
..\ 返回上一級
f.flush() 刷新內存
with open('文件路徑',mode = '模式',encoding = 'utf-8')as f:
msg = f.read()
print(msg) 不用手動關閉文件,操做完成以後自動關閉utf-8
f.seek(),移動光標的位置
f.tell(),查看光標的位置
f.truncate(),截取,指定光標的位置進行截取,按字節進行計算
with open("文件路徑",mode = '模式',encoding='utf-8')as f:
pirnt(f.read())
print(f.tell()) tell 查看光標的位置,數的是字節
with open("文件路徑",mode='模式',encoding='utf-8')as f:
f.trunca(9),截取9個字節,也就是3個字符,在python3中,要先手動移動光標,再進行 截取資源
雙數字:0,0文件的頭部;0,1光標當前的位置;0,2文件尾部
單數字:數字表示的是字節
os模式:
os.rename("舊的名字","新的名字")
os.remove("要刪除的文件")
文件修改,要先作備份
with open("文件路徑",mode= '模式',encoding='編碼集')as f,\
open("文件路徑",mode='模式',encoding='編碼集')as f1:
f:原文件的句柄
f1:新文件的句柄
msg = f.read() 讀取原文件的內容,臨時存到msg變量中
s = msg.replace('被修改的內容','修改後的內容')
f1.write(s) 將修改的內容寫到新的文件中, 原文件不動
ps:有一個弊端,當文件太大的時候,內存很容易溢出,須要用for循環
with open('文件路徑',mode='模式',encoding='utf-8')as f,\
open('文件路徑',mode='模式',encoding='utf-8')as f1:
for i in f: #一行一行的讀取
msg = i.strip().replace("舊內容","新內容")
f1.write(msg) #將每行內容寫入到新的文件中