本文采用逐行解釋的方法。python
第一步:把文件讀取出來
第二部:再用'w'模式寫入到新文件
第三部:把原文件刪除,而且把新文件重命名回原文件
這樣就實現了文件的修改操做函數
咱們先來看看原文件的內容操作系統
with open('xiakexing') as old_file: print(old_file.read())
趙客縵胡纓,吳鉤霜雪明。銀鞍照白馬,颯沓如流星。 十步殺一人,千里不留行。事了拂衣去,深藏身與名。 閒過信陵飲,脫劍膝前橫。將炙啖朱亥,持觴勸侯嬴。 三杯吐然諾,五嶽倒爲輕。眼花耳熱後,意氣素霓生。 救趙揮金錘,邯鄲先震驚。千秋二壯士,烜赫大梁城。 縱死俠骨香,不慚世上英。誰能書閣下,白首太玄經。
咱們想要作的修改是把第二行的千里不留行改爲「萬里不流行」
補充說明:用with open()格式能夠同時打開兩個文件,本例中其實是打開文件xiakexing,而且建立文件xiakexing.bak,分別建立對應的文件對象old_file和new_filecode
with open('xiakexing') as old_file,open('xiakexing.bak','w') as new_file: #採用for循環從文件對象old_file裏迭代地讀取文件,簡單來說就是一行一行地讀取文件,這樣內存中只存儲了一行文件的內容,節省了內存,也防止文件過大時形成的「超載」 for i in old_file: if '千里不留行' in i: #這裏每讀取一行咱們就對其進行條件判斷,判斷該行是不是咱們要找的那一行 i = i.replace('千','萬')#當找到該行時,把該行的內容替換成咱們想要的內容 #每讀取一行咱們就在新文件中寫入一行,無論該行有沒有變化,總之就是讀一行、寫一行、讀一行、寫一行 new_file.write(i) #當for循環結束後,文件也已經被咱們修改完畢了,這時應該刪除舊文件,重命名新文件,爲了實現這一目的,咱們引入了os模塊,os模塊內主要是一些和操做系統有關的函數 import os os.remove('xiakexing') #刪除原文件 os.rename('xiakexing.bak','xiakexing') #把新文件重命名回原文件名,最終實現了文件的修改
而後咱們再來看看文件的內容對象
with open('xiakexing') as old_file: print(old_file.read())
趙客縵胡纓,吳鉤霜雪明。銀鞍照白馬,颯沓如流星。 十步殺一人,萬里不留行。事了拂衣去,深藏身與名。 閒過信陵飲,脫劍膝前橫。將炙啖朱亥,持觴勸侯嬴。 三杯吐然諾,五嶽倒爲輕。眼花耳熱後,意氣素霓生。 救趙揮金錘,邯鄲先震驚。千秋二壯士,烜赫大梁城。 縱死俠骨香,不慚世上英。誰能書閣下,白首太玄經。
這樣,咱們就實現了文件的修改。因爲咱們使用的是with open() as 的方法,因此不須要文件關閉的步驟,若是是經過file=open()的方式開打的文件,則必須在末尾加上關閉文件的語句。內存