Python之文件內容修改

本文將介紹在python中在不改變原文件其它內容的條件下,插入或刪除內容。

我們想要達到的效果是:在文件的任意行或位置插入或刪除內容,不影響該位置前後的內容。

分為以下四種情況:

1. 替換某一行或者刪除某行內容。

2. 在指定行後添加一行內容。

3. 替換文章中的某一內容(字元串)。

4. 刪除文件中的某一關鍵詞。

這裡我們建議使用fileinput模組。首先簡單介紹下這一模組:

fileinput模組可以對一個或者多個文件中的內容進行迭代,遍歷等操作。使用這一模組可以方便的對文件進行遍歷,格式化輸出,查找,替換等操作。

基本用法是:

fileinput.input (files=None, inplace=False, backup='', bufsize=0, mode='r', openhook=None)

files:                  #文件的路徑列表,默認是stdin方式,多文件['1.txt','2.txt',…]不同文件用逗號隔開。

inplace:                #是否將標準輸出的結果寫迴文件,默認不取代。如果設置為True則將操作結果就地寫到原文件中。

backup:                 #備份文件的擴展名,如.bak。如果該文件的備份文件已存在,則會自動覆蓋。

bufsize:                #緩衝區大小,默認為0,如果文件很大,可以修改此參數。

mode:                   #讀寫模式,默認為只讀。

openhook:               #該鉤子用於控制打開的所有文件,比如說編碼方式等。

模組內置函數:

fileinput.input()       #返回能夠用於for循環遍歷的對象。  

fileinput.filename()     #返回當前文件的名稱。  

fileinput.lineno()       #返回當前已經讀取的行的數量(或者序號)。  

fileinput.filelineno()      #返回當前讀取的行的行號。  

fileinput.isfirstline()      #檢查當前行是否是文件的第一行 。 

fileinput.isstdin()      #判斷最後一行是否從stdin中讀取 。 

fileinput.close()        #關閉隊列 。

下面依次介紹各種情況的操作:

1. 替換某一行或者刪除某行內容:

# Author:Allen Liu  # Data: 08/01/2017  '''  This program is an example of file modification use fileinput module  '''  import fileinput  for line in fileinput.input('data', backup='.bak',inplace = True):      # 刪除含有某一關鍵詞的行      if 'Beijing' in line:          pass      else:          print(line.rstrip())      # 替換掉還有某一關鍵詞的行      print(line.rstrip().replace('Beijing!','Jinan!')

2. 在某一行後添加一行

# Author:Allen Liu  # Data: 07/27/2017  '''  This program is an example of file modification use fileinput module  '''  import fileinput  for line in fileinput.input('data', backup='.bak',inplace = True):      # 在指定行後添加一行      if fileinput.lineno() == 1:          print(line.rstrip())          print('Hello world!')      else:          print(line.rstrip())

3. 替換文件中的某一關鍵詞

import fileinput  for line in fileinput.input('data', backup='.bak',inplace = True):      print(line.rstrip().replace('world!', 'China!'))

4. 刪除文件中的某一關鍵詞

import fileinput  for line in fileinput.input('data', backup='.bak',inplace = True):      print(line.rstrip().replace('China',''))