Python第二十一天 fileinput模塊
fileinput模塊
fileinput.input([files[, inplace[, backup[, bufsize[, mode[, openhook]]]]]])
files: #文件的路徑列表,默認是stdin方式,多文件['1.txt','2.txt',...]
inplace: #是否將標準輸出的結果寫回文件,默認不取代
backup: #備份文件的擴展名,只指定擴展名,如.bak。如果該文件的備份文件已存在,則會自動覆蓋。
bufsize: #緩沖區大小,默認為0,如果文件很大,可以修改此參數,一般默認即可
mode: #讀寫模式,默認為只讀
openhook: #該鉤子用于控制打開的所有文件,比如說編碼方式等;
fileinput模塊提供處理一個或多個文本文件的功能,可以通過使用for循環來讀取一個或多個文本文件的所有行。
它的工作方式和readlines很類似,不同點在于它不是將全部的行讀到列表中而是創建了一個xreadlines對象。
關鍵在這句話:標準輸出會被重定向到打開文件
所以一定要用print打印到標準輸出,fileinput會自動把標準輸出內容回寫到文件,如果沒有用print打印到標準輸出,那么就會把空內容回寫到文件,也就是清除了文件所有內容
print re_basedir.sub('basedir=/usr/local/mysql', line) ,
下面是fileinput模塊中的常用函數:
input() #返回能夠用于for循環遍歷的對象
filename() #返回當前文件的名稱
lineno() #返回當前已經讀取的行的數量(或者序號)
filelineno() #返回當前讀取的行的行號
isfirstline() #檢查當前行是否是文件的第一行
示例
#如果要修改多個地方,將sub()得到的結果代入第二個sub()函數再print出來
def modify_startupscript(port): for line in fileinput.input(MYSQL_STARTUP_SCRIPT,inplace=1): re_datadir = re.compile(r'datadir=', re.I | re.M) content= re_datadir.sub('datadir=/data/mysql/mysql%s/data' %port, line) re_basedir = re.compile(r'basedir=', re.I | re.M) print re_basedir.sub('basedir=/usr/local/mysql', content) , fileinput.close()
示例
#!/usr/bin/env python import fileinput for line in fileinput.input('test.txt',backup='.bak',inplace=1): print line.replace('Python','LinuxEye'), fileinput.close()
示例
判斷是否是第一行
import fileinput for line in fileinput.input('test.txt'): if fileinput.isfirstline(): print line, else: break fileinput.close()
示例
import fileinput from glob import glob for line in fileinput.input(glob(r'd:/*.txt')): print fileinput.lineno(), u'文件:', fileinput.filename(), / u'行號:', fileinput.filelineno(), u'長度:', len(line.strip('/n')) fileinput.close()
文章列表