Python之文件內容修改
- 2020 年 1 月 7 日
- 筆記
本文將介紹在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',''))