fileinput模塊提供處理一個(gè)或多個(gè)文本文件的功能,可以通過使用for循環(huán)來(lái)讀取一個(gè)或多個(gè)文本文件的所有行。它的工作方式和readlines很類似,不同點(diǎn)在于它不是將全部的行讀到列表中而是創(chuàng)建了一個(gè)xreadlines對(duì)象。
下面是fileinput模塊中的常用函數(shù):
input() #返回能夠用于for循環(huán)遍歷的對(duì)象filename() #返回當(dāng)前文件的名稱lineno() #返回當(dāng)前已經(jīng)讀取的行的數(shù)量(或者序號(hào))filelineno() #返回當(dāng)前讀取的行的行號(hào)isfirstline() #檢查當(dāng)前行是否是文件的第一行
創(chuàng)建測(cè)試文件test.txt:
# cat > test.txt << EOFHello,Pythonwww.jb51.netThis is a test fileEOF
利用fileinput實(shí)現(xiàn)文件內(nèi)容替換,如:file_input.p(注意文件名,別寫成fileinput.py)
#!/usr/bin/env pythonimport fileinputfor line in fileinput.input('test.txt',backup='_bak',inplace=1): print line.replace('Python','LinuxEye'),fileinput.close()
inplace=1:標(biāo)準(zhǔn)輸出會(huì)被重定向到打開文件;backup='_bak',:替換文件內(nèi)容之前備份后綴以_bak結(jié)尾;另外,在調(diào)用fileinput.input()之后記得要fileinput.close()。
執(zhí)行結(jié)果如下:
# python file_input.py #執(zhí)行file_input.py# ls test.txt*test.txt test.txt_bak # cat test.txtHello,LinuxEyewww.jb51.netThis is a test file # cat test.txt_bakHello,Pythonwww.jb51.netThis is a test file
其他測(cè)試:
>>> import fileinput>>> for line in fileinput.input('test.txt'):... print fileinput.filename(),fileinput.lineno(),fileinput.filelineno()...test.txt 1 1test.txt 2 2test.txt 3 3
>>> import fileinput>>> for line in fileinput.input('test.txt'):... if fileinput.isfirstline():... print line,... else:... break...Hello,LinuxEye
新聞熱點(diǎn)
疑難解答
圖片精選